首页 > 解决方案 > 如何使用可在编译时检测到的有限长度范围的 GenericArray?

问题描述

例如,

struct Foo<T, N: ArrayLength<T>> {
    data: GenericArray<T, N>
}

我希望将数据数组的长度限制在字节等范围1001024。然后,如果Foo使用 like let f: Foo<u8, generic_array::typenum::U8> = Foo {data: GenericArray::default()};,会导致编译错误。

标签: genericsrust

解决方案


我认为你想要的是 Const Generics。

这个特性存在于 Rust 中,但它仍在进行中。您可以在夜间使用它,据我了解,有一些用例可以按预期工作。

基本上,这允许您拥有这样的泛型类型:

struct Foo<T, const N: usize> {
    // Here you can use `N` as a `const`. For example, to define the size of a `std::array`
}

以下是此功能拥有或关注的链接:


总而言之,我认为您还不能在稳定版中使用它是一种耻辱。但是伟大的事情需要时间来建立。

检查你是否可以使用它。今天确实有一些std类型使用它(并且稳定,因为它们已经被审计为健全和稳定)。例如,std::array从至少 1 年前开始广泛使用它。

我希望这会有所帮助<3


推荐阅读