将 Rc<Any> 转换为 Rc<Trait>

Ura*_*aty 5 rust

我正在尝试创建一个映射,其中键是TypeId特征的一个,值是实现它的结构。

impls: HashMap<TypeId, Rc<dyn Any>>
Run Code Online (Sandbox Code Playgroud)

要将新对象添加到地图中,我使用以下代码:

let type_id = TypeId::of::<dyn Trait>();
let obj_ref: Rc<dyn Any> = Rc::new(obj);

self.impls.insert(type_id, Rc::clone(&obj_ref));
Run Code Online (Sandbox Code Playgroud)

但是当我尝试从地图中获取这个对象时,我需要将其投射回来。

let any_comp_ref = self.impls
    .get(&TypeId::of::<dyn Trait>())
    .expect(&format!("Object for type: {} is not found", type_name::<dyn Trait>()));

let result: &dyn Trait = // ???
Run Code Online (Sandbox Code Playgroud)

我尝试过使用Rc::downcast. 但它仅针对Sized类型实现。