【问题标题】:Is it possible to control the size of an array using the type parameter of a generic?是否可以使用泛型的类型参数来控制数组的大小?
【发布时间】:2015-01-25 13:07:24
【问题描述】:

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

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

类似的东西在 C++ 模板中是可能的,但我在 Rust 中没有见过。

【问题讨论】:

标签: rust


【解决方案1】:

锈 1.51

使用const泛型

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

以前的版本

RFC 2000 — const generics 介绍了对此的支持,并在issue #44580 中跟踪进度。

如果您查看 Rust 的设计,您会注意到它首先从解决最困难的问题(内存安全、无数据争用)开始,但除此之外还有很多“不完整”的领域(与可以实现什么)。

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

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

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

【讨论】:

  • @Byron:关于信息,Pi Types Trilogy 附带了非类型参数,但仍处于 RFC 阶段。
  • 2020年好像还是不能用?谢谢!
  • @ch271828n:确实还没有。有一个稳定minimum subset of const generics的提议,这将允许它,并希望它会在年底左右实施。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 2011-11-12
    • 2021-10-09
    • 1970-01-01
    相关资源
    最近更新 更多