这是一个创建于 1668 天前的主题,其中的信息可能已经有所发展或是发生改变。
比如一个 trait A,我有 A1,A2,A3 三个结构体实现了 A 。然后我用一个 Vec 将 A1,A2,A3 的实例都存进去,这种情况下 Vec 里面的类型只能是 Box<dyn A>。
然后我从 Vec 中将 A1 的实例取出来,这个时候其类型为 Box<dyn A>,如何判断它就是 A1 呢?
第 1 条附言 · 2020-05-28 15:09:25 +08:00
不能实现向下转型,但是可以用 Any 当做 go 的 interface{}来用:
let mut vec:Vec<Box<dyn Any>> = vec![];
vec.push(Box::new(Son3{age:40}));
vec.push(Box::new(Son4{age:50}));
println!("{} {}",vec.get(0).unwrap().downcast_ref::<Son3>().unwrap().age,
vec.get(1).unwrap().downcast_ref::<Son4>().unwrap().age)
struct Son3{
age:i32,
}
struct Son4{
age:i32,
}