是否可以使用泛型的类型参数来控制数组的大小?

Is it possible to control the size of an array using the type parameter of a generic?

以下内容仅用作示例,并非有效的 Rust 代码。

struct Vec<T: Sized, Count> {
    a: [T; Count]
}

类似的东西在 C++ 模板中是可能的,但我还没有在 Rust 中看到它。

生锈 1.51

使用常量泛型:

struct Vec<T: Sized, const COUNT: usize> {
    a: [T; COUNT],
}

以前的版本

RFC 2000 — const generics introduces support for this and progress is tracked in issue #44580.

如果你看一下 Rust 的设计,你会注意到它首先是从解决最困难的问题(内存安全、无数据争用)开始的,但在其他方面它还有很多“不完整”的地方(与可以实现的目标相比)。

特别是,通用结构和函数开始时有些受限:

  • 缺少高等类型 (HKT)
  • 缺少非类型参数 => 数组是特殊情况,实现数组的特征是 a known issue,解决方法是针对几个不同的维度实现它
  • 缺少可变参数 => 元组是特殊情况,为所有元组实现一个特征同样困难

目前,并非所有这些都已实施,不是因为不需要它们,而是因为时间不够。 Rust 1.0 的想法不是发布一个不会进化的最终产品,而是一个稳定的基础;一些或可能全部会来。

在等待 Rust 获得第一个-class 对此的支持时,有些板条箱提供了某些级别的此功能,例如: