問題タブ [trait-objects]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rust - Boxの寿命に混乱構造体で
コメント行だけをコンパイルできず、x1の有効期間が十分に長くないと考える理由を正当化できません。が直接構造体用であるc2ことを除いて、それと同等のようです。構造体の1つのレイヤーを削除するだけです。何がそれほど異なる動作をするのかわかりません。BoxWrapbtContTrait
ContTrait行のコメントを外すと、次のエラー メッセージが表示されます。
rust - &Box を取るメソッドを因数分解する&T を引数として
特性パラメーターを使用して呼び出す必要があるメソッドがあります (それを呼び出しましょうListener)。その理由は、以前にこの特性パラメーターを親構造体に格納したことがあるため、内部にあるBox場合とそうでない場合があるためです。
だから私は2つの方法があります:
fref<T>(t: &T) where T: Listenerfbox(t: &Box<dyn Listener>)
そして、私は彼らの両方に電話してもらいたいf(t: ??). 今のところ、 と のコードを複製しましたがfref、fboxこれは機能しますが、良くありません。fそのため、コードから呼び出して因数分解できるようにfrefするfbox署名を探しています。によって実装された特性の 1 つがBoxa と同等であることを期待していました&(または、少なくともどこかで共通点を見つけます)。
私は次のことを試しました:
- 書い
f<T>(t: &T) where T: Listenerているのに、から呼び出すことができませんfbox(Listenerによって実装されていませんBox<dyn Listener>)。 次に、呼び出しを内側からボックス化解除するように変更します
fboxがf(&*t)、そうBox<Listener>でtはないため、Sizeできません。書い
f<T>(t: &T) where T: std::borrow::Borrow<Listener>ているが、から呼び出すことができないfref(Borrowはによって実装されていないListener)- と同じ
AsRef<Listener> Deref遊び場での最後の試み: