Как использовать константу из черты при определении структуры? - PullRequest
1 голос
/ 15 марта 2020

Следующий код:

use std::marker::PhantomData;

trait MyTrait {
    const FOO: usize;
}

struct MyStruct<T: MyTrait> {
    v: [u32; <T as MyTrait>::FOO],
    p: PhantomData<T>,
}

выдает мне следующую ошибку компиляции:

error[E0277]: the trait bound `T: MyTrait` is not satisfied
 --> src/lib.rs:8:14
  |
4 |     const FOO: usize;
  |     ----------------- required by `MyTrait::FOO`
...
7 | struct MyStruct<T: MyTrait> {
  |                 -- help: consider further restricting this bound: `T: MyTrait +`
8 |     v: [u32; <T as MyTrait>::FOO],
  |              ^^^^^^^^^^^^^^^^^^^ the trait `MyTrait` is not implemented for `T`

( Ссылка на игровую площадку )

Как я могу успешно использовать FOO при определении моего вектора?

1 Ответ

1 голос
/ 15 марта 2020

В настоящее время вы не можете .

Длина массива не может использовать общие c параметры. Эта проблема возникает из-за того, как константы и обобщенные элементы реализованы и взаимодействуют друг с другом в компиляторе, и над этим работали в течение нескольких лет с медленными улучшениями.

...