1

我有一个 traitMyTrait和一个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>>>.

我该如何解决这个问题?

4

0 回答 0