我有一个标签特征,它有一个关联的常量:
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`.
虽然我理解错误本身,但我不明白其原因或如何解决它。
虽然不理想,但我已将 Chayim Friedman 的评论作为可能的解决方案。它可以是存储类型本身,而不是使关联类型成为指示元素数量的常量:
trait Trait {
type Buffer;
}
struct S<T: Trait> {
field: T::Buffer,
}