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

rit*_*mon 2 struct traits rust

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

trait A { }
struct S { a: A, b: A }
Run Code Online (Sandbox Code Playgroud)

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

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

WiS*_*GaN 7

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

如果您不拥有这些对象,则可以使用引用.

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 A1A2表示A在代码中实例化时实现trait的具体类型.