問題タブ [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 - Rust のスレッド間で特性オブジェクトを送信する
スレッド間で特性オブジェクトを送信したいのですが、それが可能かどうかわかりません。Send
彼らは明らかに特性を満たしていないので、そうではないかもしれません.
次のコードは、私がやろうとしていることを示しています。
これは次のメッセージで失敗します。
ボックス化されていないプレーンな trait オブジェクトを送信しようとすると、その他のエラーが多数発生しSend + Sized
ます。
私はまだRustにかなり慣れていないので、何かが欠けているかどうかはわかりませんが、コンパイラに特性オブジェクトを作成するよう説得する方法がないという印象を受けますSend
。
現在それが不可能である場合、将来これを可能にする可能性のある作業は現在進行中ですか?
syntax - Rustで「impl TraitX for TraitY」とはどういう意味ですか?
例えば:
私はそれが同じ意味になると思った
しかし、エラーメッセージはそうでないことを示唆しています:
impl TraitX for TraitY
(または明示的なライフタイムを持つその変種) は、Rust で何かを意味しますか? もしそうなら、その使用の例は何ですか?
rust - 特定の特性/構造体の組み合わせの v-ptr を取得する方法は?
Rust では、aは脂肪参照&T
であり、実際には に対応します。T
trait
raw::TraitObject
を使用すると、余暇に を分解TraitObject
および再構築できます。&T
ただし、 a を分解して を取得するvtable
のは簡単ですが、そもそも を取得せず、 and だけを取得する&T
とどうなるでしょうか。基本的に、次のようなものです。&T
T
S
どうすればそこから v-ptr を推測できますか? 私が使用できる組み込みはありますか?
S
注: を作成して(または空中から呼び出して)参照を作成する単純な実装は&T
機能しません。コンパイラT
は、必ずしも a ではないため、trait
サイズ&T
が 1 つまたは 2 つのポインターであると不平を言います。
casting - RcをキャストするにはどうすればよいですかRcに>>
を実装する特性MyTrait
と構造体があります。MyStruct
MyTrait
引数として受け入れる関数もありRc<RefCell<Box<MyTrait>>>
ます。
コードのどこかで、次のインスタンスを作成しますRc<RefCell<Box<MyStruct>>>
。
関数に渡すmy_struct
と、コンパイラ エラーが発生します。
エラー: 型が一致しません: 予想されるalloc::rc::Rc<core::cell::RefCell<Box<MyTrait>>>
、見つかりましたalloc::rc::Rc<core::cell::RefCell<Box<MyStruct>>>
Rc<RefCell<Box<MyStruct>>>
必要な型を明示的に指定してのインスタンスを作成することで、これを修正しようとしています。
この場合、関数への受け渡しは正常に機能しますが、変数を介して特定のフィールドにmy_struct
アクセスできなくなりました。そして、それは にキャストする方法ではないようです。MyStruct
my_struct
Rc<RefCell<Box<MyTrait>>>
Rc<RefCell<Box<MyStruct>>>
どうすればこの問題を回避できますか?
rust - u8 スライスから Read trait オブジェクトを作成する
このように、クレートで使用するために、スライスRead
から特性オブジェクトを作成しようとしていますu8
murmur3
しかし、私は得る
このコードの何が問題になっていますか?
rust - ボックスの作成方法、またはボックス化されたサイズのない一般的な値ですか?
次のコードがあります
それは不平を言う
がこれを on に課さないのに、なぜSized
onRng
が必要なのか理解できません。Box<T>
T
rust - Rust の混同エラーと特性オブジェクトの有効期間
次のコードで何が問題なのか誰にもわかりますか? コンパイラはライフタイムについて不平を言っていますが、エラーメッセージはまったく意味がありません。考えられることはすべて試しましたが、何も役に立たないようです。
コンパイルエラーは
これはまったく意味がありません。借り手はどのように長生きしていますか?借りた値すら使っていない!