我知道这在Rust中是非法的:
trait A { }
struct S { a: A, b: A }
原因是除了最后一个成员之外的所有成员都必须调整大小,并且不调整特征的大小。
这是否意味着不可能有特征的结构/元组?我如何从函数返回一对值,我只知道它们实现了某个特征?
答案 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
中,每个A1
或A2
代表在您的代码中实例化时实现特征A
的具体类型。