Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 如何声明锈菌中可比较物质的通用载体_Generics_Rust - Fatal编程技术网

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>,
}