помощью.
Хочу создать переменную типа HashMap, значениями которой могут быть структуры, реализующие определенный трейт. Это возможно?
Пишу
trait StructTrait {
fn func(&self) -> HashMap<u64, AnotherStruct>;
}
struct SimpleStruct {
hashmap: HashMap<u64, OneMoreStruct>,
}
impl StructTrait for SimpleStruct {
fn func(&self) -> HashMap<u64, AnotherStruct> {
let hm: HashMap<u64, AnotherStruct> = HashMap::new();
nm
}
}
let mut hashmap: HashMap<u64, dyn StructTrait> = HashMap::new()
Но компилятор ругается
the trait std::marker::Sized is not implemented for dyn StructTrait
Вообще dyn Trait'ы стоит использовать достаточно редко, но это возможно. Надо обернуть dyn Trait в коробку (Box<_>) или ссылку (&_)
Обсуждают сегодня