Rust初始化泛型类型

问题描述 投票:0回答:1

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

谢谢,

rust
1个回答
3
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.