rit*_*mon 2 struct traits rust
我知道这在Rust中是非法的:
trait A { }
struct S { a: A, b: A }
Run Code Online (Sandbox Code Playgroud)
原因是除了最后一个成员之外的所有成员都必须调整大小,并且不调整特征.
这是否意味着不可能有特征的结构/元组?我如何从函数返回一对值,我只知道它们实现了某个特征?
您已经确定了类型不大的问题,因此您只需将其转换为大小类型即可.
如果您不拥有这些对象,则可以使用引用.
struct S1<'a> {
a: &'a A,
b: &'a A,
}
Run Code Online (Sandbox Code Playgroud)
如果它们不同,您可以使用两个生命周期而不是一个生命周期.
struct S1<'a, 'b> {
a: &'a A,
b: &'b A,
}
Run Code Online (Sandbox Code Playgroud)
如果您想拥有这些对象,您可以使用Box.
struct S2 {
a: Box<A>,
b: Box<A>,
}
Run Code Online (Sandbox Code Playgroud)
此外,如果您在编译时知道具体类型,并且只想编写通用代码,那么您也可以编写泛型结构
struct S3<A1: A, A2: A> {
a: A1,
b: A2,
}
Run Code Online (Sandbox Code Playgroud)
In S3,each A1或A2表示A在代码中实例化时实现trait的具体类型.