我想创建以下矩阵:
- 内部结构是一个一维数组
- 我希望在编译时知道尺寸
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
仍然是不完整的,并且有很多微妙的错误。