一种安全的方法是添加一个方法
fn any(&self) -> &Any
你的trait,它携带了类型信息,使得对任意类型(在本例中)执行checked downcast成为可能
B
use std::any::Any;
trait A {
fn something(&self);
fn any(&self) -> &Any;
}
struct B {
some_field: i32,
}
impl A for B {
fn something(&self) {}
fn any(&self) -> &Any {
self
}
}
fn some_func(a: &dyn A) {
let b: &B = a.any().downcast_ref().unwrap();
}