Struct Rust中可能有一个结构/元组特征?

Struct Rust中可能有一个结构/元组特征?,struct,rust,traits,Struct,Rust,Traits,我知道这在Rust是非法的: trait A { } struct S { a: A, b: A } 原因是,除最后一个成员外,所有成员都必须调整大小,而某个特征不调整大小 这是否意味着不可能有一个特征的结构/元组?我如何从一个函数返回一对值,而我只知道它们实现了某个特性?您已经发现了类型未调整大小的问题,所以只需要将其转换为调整大小的类型 如果您不拥有这些对象,则可以使用引用 struct S1<'a> { a: &'a A, b: &'a A,

我知道这在Rust是非法的:

trait A { }
struct S { a: A, b: A }
原因是,除最后一个成员外,所有成员都必须调整大小,而某个特征不调整大小


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

您已经发现了类型未调整大小的问题,所以只需要将其转换为调整大小的类型

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

struct S1<'a> {
    a: &'a A,
    b: &'a A,
}
此外,如果您在编译时知道具体类型,并且只想编写泛型代码,那么也可以编写泛型结构

struct S3<A1: A, A2: A> {
    a: A1,
    b: A2,
}
结构S3{ a:A1, b:A2, }
S3
中,每个
A1
A2
代表一个具体类型,当您在代码中实例化trait
a
时,该类型将实现trait
a

谢谢。我想S3就是我要找的,但是这个声明是如何使结构调整大小以便编译器不会抱怨的呢?@rityzmon,这是因为
A1
A2
在实例化时将是实际的类型,虽然trait
A
没有调整大小。在代码中使用泛型结构时,必须指定类型
A1
A2
。这就是编译器知道类型大小的方式(以及时间),因为您可以直接告诉编译器这些类型到底是什么。谢谢。如果我想从一个函数返回一个特征元组,我将如何使用相同的技术?我试图解决的一个具体问题是
trait T{fn func(&self,x:&self)->(self,self);}
。trait中的单个函数接受另一个相同类型的对象,并返回另外两个相同类型的对象。@rityzmon,因为您需要将
Self
设置为大小类型,以便可以在元组中使用,所以只需在trait声明中声明
T
设置为
std::marker::size
。以下是一个例子:
struct S2 {
    a: Box<A>,
    b: Box<A>,
}
struct S3<A1: A, A2: A> {
    a: A1,
    b: A2,
}