Kode berikut:

use std::marker::PhantomData;

trait MyTrait {
    const FOO: usize;
}

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

Memberi saya kesalahan kompilasi berikut:

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`

(Tautan ke taman bermain)

Bagaimana saya bisa berhasil menggunakan FOO saat mendefinisikan vektor saya?

1
prosc 15 Maret 2020, 21:32

1 menjawab

Jawaban Terbaik

Saat ini, Anda tidak bisa.

Panjang array tidak dapat menggunakan parameter umum. Ini adalah masalah yang dihasilkan dari cara konstanta dan generik diimplementasikan dan berinteraksi satu sama lain dalam kompiler dan telah dikerjakan selama beberapa tahun dengan peningkatan yang lambat.

1
mcarton 15 Maret 2020, 18:51