Rust初始化泛型类型

Luk*_*pin 0 rust

我有下面概述的复杂代码块。基本上,我需要初始化一个泛型,它始终是一个结构,并且该结构已实现Default,但是编译器仍然抱怨:

fn create<T: Default>() -> T
{
    T { ..Default::default() }
}

fn main()
{
    let mut x = create::<Bob>();
}
Run Code Online (Sandbox Code Playgroud)

产量:

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
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉锈T总是一个结构或某种东西?

谢谢,

Vic*_*voy 5

我怀疑您能否完全执行此代码。通过使用花括号,我们告诉编译器我们初始化了一个struct。但是泛型类型不能是结构,泛型只能是具有生存期的特征。例如,您不能仅在通用代码中坚持使用结构,而是可以坚持一些要求,这就是Defaulttrait的实现。因此,在您的通用函数代码中,您唯一可以期待的就是Default特征。要使用它,您必须编写使用该特征的适当代码:

fn create<T: Default>() -> T
{
    T::default()
}
Run Code Online (Sandbox Code Playgroud)

此代码将通过调用方法来使用TDefault实现default()