を実装する特性MyTraitと構造体があります。MyStructMyTrait
引数として受け入れる関数もあり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アクセスできなくなりました。そして、それは にキャストする方法ではないようです。MyStructmy_structRc<RefCell<Box<MyTrait>>>Rc<RefCell<Box<MyStruct>>>
どうすればこの問題を回避できますか?