Generics 如何声明锈菌中可比较物质的通用载体
我如何定义锈中可比较的矢量 比如说,Generics 如何声明锈菌中可比较物质的通用载体,generics,rust,Generics,Rust,我如何定义锈中可比较的矢量 比如说,i32,i16 我尝试了arr:Vec,但编译器抱怨特性“std::cmp::Ord”无法生成对象 基本上我需要存储一个向量,一个可比较对象的向量。 e、 g struct设置{ arr:Vec } impl设置{ fn new()->Self{ 自我{ 艾尔:维克[ vec![1,2,3,4,5], vec![1.0,2.0,3.0] ] } } } 与其让消费者决定具体的类型,我希望他们能得到一个可比物品的向量。类型Vec将是一个Vec,其中每个物品都是
i32
,i16
我尝试了arr:Vec
,但编译器抱怨特性“std::cmp::Ord”无法生成对象
基本上我需要存储一个向量,一个可比较对象的向量。
e、 g
struct设置{
arr:Vec
}
impl设置{
fn new()->Self{
自我{
艾尔:维克[
vec![1,2,3,4,5],
vec![1.0,2.0,3.0]
]
}
}
}
与其让消费者决定具体的类型,我希望他们能得到一个可比物品的向量。类型Vec
将是一个Vec
,其中每个物品都是特征对象。您要做的是执行Vec
,然后将T
上的trait绑定设置为:Ord
,例如
struct Foo<T: Ord> {
arr: Vec<T>,
}
structfoo{
arr:Vec,
}
如果您提供了一个更完整的代码示例,那么提供一个明确的答案会容易得多。我想知道扩展您试图解决的问题,而不是一个解决方案的具体可能性,是否有助于您获得更好的答案。为什么这些是二维向量?为什么他们需要不同的类型?这种结构的用途是什么?它的动机是什么?感谢您的回答。这是我最初的想法,但有没有办法创建一个实例呢?实际上,我需要的是Vec
,需要存储一个i32
数组和一个i16
数组。您知道如何在这种情况下实施新的?与其让消费者声明他们需要的确切类型,我希望他们得到的东西只能在向量中进行比较,这样就不会存储足够的类型信息。实现Ord
的类型只能与同一类型的另一个值进行比较,而Ord
的trait对象将无法知道允许与哪个类型进行比较。您可以使用单个类型的Vec
,如i32
,但是你不能有一个混合的Vec
或任意整数类型并期望能够对它们进行比较。@user3003238如果你想混合两种类型,还有另一种解决方案,比如使用枚举。@user3003238嗯,这很遗憾一开始听起来很奇怪,但这不是一个任意的限制,这是因为Rust的向量确实为其值提供了高效的连续存储,而不引入间接寻址。(同样的事情适用于C++ <代码> STD::vector )但是如果你需要间接的,很容易得到它!只需将矢量存储为Vec
。或者创建您自己的ComparableNumber
trait,它扩展了Ord
,还提供了一种检索数字的方法,并使向量成为Vec
。
struct Foo<T: Ord> {
arr: Vec<T>,
}