我正在尝试创建一个映射,其中键是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类型实现。
| 归档时间: |
|
| 查看次数: |
627 次 |
| 最近记录: |