可以使用关联常量初始化固定大小数组的长度吗?

时间:2016-05-29 13:21:48

标签: rust

在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矢量类型。

2 个答案:

答案 0 :(得分:4)

不,关联的常量对没有帮助,也不打算。关联的任何内容都是输出,而问题中的用例需要输入。原则上可以构造一些类型参数和具有相关常量的特征(至少,只要你可以使用类型参数的相关常量 - 遗憾的是它还不起作用)。但这有可怕的人体工程学,并不比typenum等现有的黑客好多了。

非常需要整数类型参数,因为正如您所注意到的,它们启用了许多在当前Rust中不可行的事情。人talk about this and plan for it但它还没有。

答案 1 :(得分:1)

目前不支持整数类型参数,但是有一个针对该IIRC的RFC,以及长期的讨论。

您可以同时使用typenum crate。