Rust初始化泛型类型

时间:2017-12-28 04:18:15

标签: rust

我已经获得了一大堆代码,我已经在下面概述了这些代码。基本上我需要初始化一个泛型,它总是一个结构,并且该结构已经实现了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总是一个结构或什么?

谢谢,

1 个答案:

答案 0 :(得分:3)

我怀疑你能完全执行这段代码。通过使用花括号,我们告诉编译器我们初始化struct。但是泛型类型不能是结构,泛型只能是生命周期的特征。例如,您不能仅坚持在通用代码中使用结构,但您可能会坚持一些要求,即Default特征的实现。因此,在您的通用功能代码中,您唯一可以期待的是Default特征。要使用它,您必须编写使用特征的相应代码:

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

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