Rust定义编译期定维Matrix结构体遇const参数运算报错问题
报错原因
该报错是旧版Rust对const泛型的使用限制导致的:Rust 1.59稳定版之前,const泛型参数不允许在常量表达式中参与运算,只能作为独立的常量值使用,因此width * len这类涉及两个const泛型参数的运算无法直接作为数组的长度参数使用。
解决方案
方案1:升级Rust工具链(推荐)
将Rust稳定工具链升级到1.59及以上版本后,你原本的代码不需要任何修改即可正常编译。
升级工具链执行命令:rustup update stable
方案2:使用typenum库兼容旧版本
如果暂时无法升级Rust版本,可以借助typenum库实现编译期数值计算,适配旧版本编译器:
- 首先在
Cargo.toml中添加依赖:typenum = "1.17" - 改写矩阵结构体代码:
use typenum::{Unsigned, Mul, Product}; pub struct Matrix<LikeNumber, Len: Unsigned, Width: Unsigned> where Len: Mul<Width>, Product<Len, Width>: Unsigned, { elements: [LikeNumber; <Len as Mul<Width>>::Output::USIZE], }
内容的提问来源于stack exchange,提问作者Pierre-olivier Gendraud
相关产品推荐
相关产品推荐

