在C ++中,您可以在模板中传递积分
std::array<int, 3> arr; //fixed size array of 3
我知道Rust已经内置了对此的支持,但是如果我想创建类似线性代数矢量库的东西呢?
struct Vec<T, size: usize> {
data: [T; size],
}
type Vec3f = Vec<f32, 3>;
type Vec4f = Vec<f32, 4>;
这是我目前在D中所做的事情。我听说Rust现在有Associated Constants。
我很长一段时间没有使用Rust,但这似乎没有解决这个问题或者我错过了什么?
据我所知,关联常数仅在特征中可用,这意味着我仍然需要手动创建N
矢量类型。
答案 0 :(得分:4)
不,关联的常量对没有帮助,也不打算。关联的任何内容都是输出,而问题中的用例需要输入。原则上可以构造一些类型参数和具有相关常量的特征(至少,只要你可以使用类型参数的相关常量 - 遗憾的是它还不起作用)。但这有可怕的人体工程学,并不比typenum等现有的黑客好多了。
非常需要整数类型参数,因为正如您所注意到的,它们启用了许多在当前Rust中不可行的事情。人talk about this and plan for it但它还没有。
答案 1 :(得分:1)
目前不支持整数类型参数,但是有一个针对该IIRC的RFC,以及长期的讨论。
您可以同时使用typenum
crate。