1

を実装する特性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>>>

どうすればこの問題を回避できますか?

4

0 に答える 0