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

问题描述 投票:16回答:2

以下内容仅用作示例,而不是有效的Rust代码。

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

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

rust
2个回答
15
投票

此功能尚不可用。 RFC 2000 — const generics将在实施时支持它并在issue #44580中跟踪进度。

在夜间Rust中,您的示例如下所示:

#![feature(const_generics)]

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

如果你看一下Rust的设计,你会发现它首先解决了最困难的问题(内存安全,数据竞争免费),但是还有许多领域是“不完整的”(与可能的相比)实现)。

特别是,今天的通用结构和功能有些限制:

  • 缺乏高级金属类型(HKT)
  • 缺少非类型参数=>数组是特殊的,并且实现数组的特征是a known issue,解决方法是为几个不同的维度实现它
  • 缺乏可变参数=>元组是特殊的,并且为所有元组实现特性同样困难

目前,这些都没有实施,不是因为它们不是被期望的,而仅仅是因为缺乏时间。 Rust 1.0的想法不是发布一个不会发展的最终产品,而是一个稳定的基础,从此开始;一些或许所有人都会来。


3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.