【问题标题】:Rust initialize generic typeRust 初始化泛型类型
【发布时间】:2017-12-28 13:19:47
【问题描述】:

我有一段复杂的代码,如下所述。基本上我需要初始化一个泛型,它始终是一个结构,并且该结构已实现 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

有没有办法告诉 rust T 总是一个结构或其他东西?

谢谢,

【问题讨论】:

    标签: rust


    【解决方案1】:

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

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

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

    【讨论】:

    • @LukeDupin 很高兴听到 :)
    猜你喜欢
    • 2019-10-06
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    相关资源
    最近更新 更多