我有一个具有关联常量的标签特征:
trait Trait {
const N: usize;
}
我有一个通用的类型,受特征限制。我希望能够N
在声明中使用:
struct S<T: Trait> {
field: [f64; T::N],
}
我的期望是,对于Trait
指定的任何实现N
,我都可以有一个S
包含那么多浮点数的数组。相反,我收到以下编译器错误:
error: generic parameters may not be used in const operations
--> src/main.rs:8:18
|
8 | field: [f64; T::N],
| ^^^^ cannot perform const operation using `T`
|
= note: type parameters may not be used in const expressions
error[E0392]: parameter `T` is never used
--> src/main.rs:7:10
|
7 | struct S<T: Trait> {
| ^ unused parameter
|
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
For more information about this error, try `rustc --explain E0392`.
虽然我理解错误本身,但我不明白其原因或如何解决它。
使用关联类型的另一种解决方案是使用
typenum
整数:游乐场。
虽然并不理想,但我已将 Chayim Friedman 的评论作为可能的解决方案。它可以是存储类型本身,而不是使关联类型成为指示元素数量的常量:
需要
trait
animpl
来定义它const N
。尝试这个: