我如何存储一个任意的结构体,并在以后将其恢复为trait?
我不知道将被请求的trait。在某些情况下,结构体可能实现了trait,但在其他情况下,它可能不实现。
我尝试了面向对象的方法,将结构体存储为Any,然后将其向下转换为我需要的trait。然而,据我所知,这是不可能的,因为Rust没有运行时反射。
use std::{any::Any, collections::HashMap};
pub trait MyTrait {}
pub struct MyStruct {}
impl MyTrait for MyStruct {}
fn main() {
let my_struct = MyStruct {};
let as_any: Box<dyn Any> = Box::new(Box::new(my_struct));
let mut hashmap = HashMap::new();
hashmap.insert("key", as_any);
// In this example, I try to downcast to my trait, but it could be an other trait elsewhere in the code.
match hashmap.get_mut("key").unwrap().downcast::<Box<dyn MyTrait>>() {
Some(_) => println!("Casting worked"),
None => println!("Casting failed")
}
}
编辑:添加更多细节。这是一个库,我不知道将存储在HashMap
中的traits或struct。
1条答案
按热度按时间ej83mcc01#
你可以用枚举来做类似的事情: