私はタイプがあります。ポインタからメンバーへのポインタを含む構造体へのポインタの取得方法は?
struct Foo {
memberA: Bar,
memberB: Baz,
}
を、私は知っているポインタがFoo
にmemberB
へのポインタです:
p: *const Baz
を指す新しいポインタp: *const Foo
を取得するための正しい方法は何ですか元の構造Foo
?
私の現在の実装では、私はかなり確信している、次が原因p
がFoo
へのポインタではありません(p as *const Foo)
の間接参照に未定義の振る舞いを呼び出すです:
let p2 = p as usize -
((&(*(p as *const Foo)).memberB as *const _ as usize) - (p as usize));
これは、FFIの一部です - Iこの操作を実行する必要がないようにコードを簡単に再構成することはできません。
これはGet pointer to object from pointer to some memberと非常によく似ていますが、私が知る限り、offsetof
マクロはありません。
は、なぜあなたはだけではなく、Cコードに '* constのFoo'に渡すことはできませんか? – Shepmaster
この特定の例では、FFIは私に 'const Baz'を与えており、元のオブジェクトを取得することが期待されています。私が元のオブジェクトの周りを単に渡すことができれば、それは可能ですが、それは選択肢ではありません。 – Mystor