我有一个复杂的代码块,我在下面概述了。基本上我需要初始化一个泛型,它总是一个结构,并且该结构已经实现了Default,但编译器仍然抱怨:
fn create<T: Default>() -> T
{
T { ..Default::default() }
}
fn main()
{
let mut x = create::<Bob>();
}
产量:
error[E0574]: expected struct, variant or union type, found type parameter `T`
--> macro.rs:71:5
|
71 | T { ..Default::default() }
| ^ not a struct, variant or union type
error: aborting due to previous error
有没有办法告诉锈,T总是一个结构或什么?
谢谢,
我怀疑你可以执行这个代码。通过使用花括号,我们告诉编译器我们初始化一个struct
。但泛型类型不能是结构,泛型只能是生命周期的特征。例如,你不能坚持只在通用代码中使用结构,但你可能会坚持一些要求,这就是Default
trait的实现。因此,在您的通用功能代码中,您唯一可以期待的是Default
特性。要使用它,您必须编写使用该特征的相应代码:
fn create<T: Default>() -> T
{
T::default()
}
此代码将通过调用T
方法使用Default
的default()
实现。