使用Box
定义一个实现了Trait的结构体,并将其Box化,然后就可以将它们放入同一个Vec中。
trait MyTrait {
fn my_trait_method(&self);
}
struct MyStruct1 {}
impl MyTrait for MyStruct1 {
fn my_trait_method(&self) {
println!("MyStruct1");
}
}
struct MyStruct2 {}
impl MyTrait for MyStruct2 {
fn my_trait_method(&self) {
println!("MyStruct2");
}
}
fn main() {
let mut vec: Vec<Box<dyn MyTrait>> = Vec::new();
vec.push(Box::new(MyStruct1 {}));
vec.push(Box::new(MyStruct2 {}));
for item in &vec {
item.my_trait_method();
}
}