可以在Rust中使用特征结构/元组吗?

时间:2016-11-01 05:42:43

标签: struct rust traits

我知道这在Rust中是非法的:

trait A { }
struct S { a: A, b: A }

原因是除了最后一个成员之外的所有成员都必须调整大小,并且不调整特征的大小。

这是否意味着不可能有特征的结构/元组?我如何从函数返回一对值,我只知道它们实现了某个特征?

1 个答案:

答案 0 :(得分:7)

您已经确定了类型不大的问题,因此您只需将其转换为大小类型。

如果您不拥有这些对象,则可以使用参考。

struct S1<'a> {
    a: &'a A,
    b: &'a A,
}

如果它们不同,你可以使用两个生命周期而不是一个生命周期。

struct S1<'a, 'b> {
    a: &'a A,
    b: &'b A,
}

如果您想拥有这些对象,可以使用Box

struct S2 {
    a: Box<A>,
    b: Box<A>,
}

此外,如果您在编译时知道具体类型,并且只想编写通用代码,那么您也可以编写泛型结构

struct S3<A1: A, A2: A> {
    a: A1,
    b: A2,
}

S3中,每个A1A2代表在您的代码中实例化时实现特征A的具体类型。