Struct Rust中可能有一个结构/元组特征?
我知道这在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,
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
代表一个具体类型,当您在代码中实例化traita
时,该类型将实现traita
。谢谢。我想S3就是我要找的,但是这个声明是如何使结构调整大小以便编译器不会抱怨的呢?@rityzmon,这是因为A1
和A2
在实例化时将是实际的类型,虽然traitA
没有调整大小。在代码中使用泛型结构时,必须指定类型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,
}