У меня есть черта MyTrait
, которая определяет метод с именем my_func
, который возвращает массив неизвестного размера. Причина этого заключается в том, что размер массива, возвращаемого этим методом, будет зависеть от структуры, которая реализует черту. Итак, определение метода выглядит так:
MyTrait<T: Clone + Float> {
fn my_func() -> &[&[T]];
}
Теперь я пытаюсь реализовать эту черту следующим способом:
impl MyStruct {
const matrix_desc: [[u32; 4]; 4] = [
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]
];
}
impl MyTrait<u32> for MyStruct {
fn my_func() -> &[&[u32]] {
&matrix_desc
}
}
Однако я продолжаю получать сообщения о том, что есть несоответствие типов и что Rust ожидал &[&[u32]]
, но получил &[[u32; 4]; 4]
. Это очень ясно для меня, но я не уверен, как это исправить. Я также пытался использовать черту Sized
, но не могу заставить ее работать. Кто-нибудь знает, как я могу вернуть массивы неизвестного размера во время компиляции?
Кроме того, кто-нибудь знает о бонусных баллах, как заставить этот 2d-массив быть квадратным?