访问泛型结构体字段声明中的关联内容

问题描述 投票:0回答:1

我有一个标签特征,它有一个关联的常量:

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`.

虽然我理解错误本身,但我不明白其原因或如何解决它。

generics rust traits
1个回答
0
投票

虽然不理想,但我已将 Chayim Friedman 的评论作为可能的解决方案。它可以是存储类型本身,而不是使关联类型成为指示元素数量的常量:

trait Trait {
    type Buffer;
}

struct S<T: Trait> {
    field: T::Buffer,
}
© www.soinside.com 2019 - 2024. All rights reserved.