创建一个像向量一样具有泛型常量的矩阵



我想创建以下矩阵:

  • 内部结构是一个一维数组
  • 我希望在编译时知道尺寸
pub struct Matrix<LikeNumber,const len: usize, const width : usize>{
elements : [LikeNumber;width*len]
}

但是我有以下问题

元素:[LikeNumber;width*len]|无法使用width执行常量运算|=help:cconst参数只能用作独立参数,即width

正如错误消息所说,Rust还不支持这一点。只能单独使用泛型常量参数,而不能作为常量表达式的一部分。

如果你在Nightly编译器上编译它,你会得到以下错误消息:

error: generic parameters may not be used in const operations
--> src/lib.rs:3:30
|
3 |       elements : [LikeNumber;width*len]
|                              ^^^^^ cannot perform const operation using `width`
|
= help: const parameters may only be used as standalone arguments, i.e. `width`
= help: use `#![feature(generic_const_exprs)]` to allow generic const expressions

在代码中启用#![feature(generic_const_exprs)]可以在Nightly编译器上支持此功能。您目前需要添加一个伪绑定来编译代码,不过:

#![feature(generic_const_exprs)]
pub struct Matrix<T, const LEN: usize, const WIDTH: usize>
where
[T; WIDTH * LEN]:,
{
elements: [T; WIDTH * LEN],
}

绑定基本上断言表达式是";可评估";。在这个特性在稳定的Rust中可用之前,已经计划了一个专门的语法。

请注意,generic_const_exprs仍然是不完整的,并且有很多微妙的错误。

最新更新