如何将Rc <refcell <box <mytrait>转换为Rc <refcell <box <mystruct>&gt;&gt;

时间:2015-06-15 21:40:57

标签: casting rust dynamic-dispatch trait-objects

我有一个特征MyTrait和一个实现MyStruct的结构MyTrait

我还有一个接受Rc<RefCell<Box<MyTrait>>>作为参数的函数。

在代码的某处,我创建了一个Rc<RefCell<Box<MyStruct>>>的实例:

let my_struct = Rc::new(RefCell::new(Box::new(MyStruct)));

当我将my_struct传递给我的函数时,我收到编译错误:

错误:类型不匹配:  预期alloc::rc::Rc<core::cell::RefCell<Box<MyTrait>>>,     找到alloc::rc::Rc<core::cell::RefCell<Box<MyStruct>>>

我尝试通过明确指定我需要的类型来创建Rc<RefCell<Box<MyStruct>>>的实例来解决这个问题:

let my_struct: Rc<RefCell<Box<MyTrait>>> = Rc::new(RefCell::new(Box::new(MyStruct)));

在这种情况下,将my_struct传递给我的函数可以正常工作,但我无法通过MyStruct变量访问任何my_struct个特定字段。它似乎不是一种将Rc<RefCell<Box<MyTrait>>>放到Rc<RefCell<Box<MyStruct>>>的方法。

如何解决这个问题?

0 个答案:

没有答案