を実装する特性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>>>
どうすればこの問題を回避できますか?