1
ポインタをラップ構造体を考えると
pub struct Ptr<T> {
ptr: T
}
はそれがT
は、生のポインタ型でなければならないことを宣言することは可能ですか?例えば*mut SomeStruct
または*const SomeStruct
です。
これがなければ、方法の中で&*self.ptr
のような操作を実行することができません。なぜなら、Rustはptr
をポインタのように扱うことができないということを知らないからです。
これを動作させることができることに注意してください:我々は、他の例で*const
をお勧めします
pub struct Ptr<T> {
ptr: *mut T
}
しかし、その場合には、そのハードコード*mut
、。
参照:this answerいくつかの文脈を与える。
生ポインタは 'ops :: Deref'を使用しません。 unsafeなポインタをderefする能力は、何らかの形でコンパイラ内部にあるようです。だから私はそれが一般的なコンテキストでこの安全ではない展開の動作を得ることは不可能だと思います。あなたはカスタム特性を書いて、演算子を使う代わりにderefに独自のメソッドを使うことができます。 –
ポインタとして 'ptr'を宣言するのが正しい方法だと思います。 '* const T 'と' * mut T'の間はいつでも 'as'を使って変換できます。また、実際に区別が必要な場合は、2つのバリアントを持つ列挙型またはそれを実装する2つの構造体を持つ特性を使用できます。 –