Хочу положить трейт в хешмапу? И чтобы мапа владела ими.
Ругается, что не реализован std::marker::Sized
struct s1 { field: i8, }
trait t_do_some{
fn do_some(&self);
}
impl t_do_some for s1{
fn do_some(&self){}
}
let mut all_objects1:HashMap<i32, t_do_some> = HashMap::new();
Ругается так:
|
245 | let mut all_objects1:HashMap<i32, t_do_some> = HashMap::new();
| ^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::marker::Sized` is not implemented for `t_do_some`
|
= note: `t_do_some` does not have a constant size known at compile-time
= note: required by `std::collections::HashMap`
Разумеется, размер неизвестен. Там же могут быть разные структуры с разным размером.
И я понимаю, что можно создать енум, в котором перечислено все, что может в мапе лежать, и положить в хешмапу этот енум. Но может есть способ проще?