Ich habe einen Typ:Wie bekomme ich einen Zeiger auf eine umgebende Struktur von einem Zeiger auf ein Mitglied?
struct Foo {
memberA: Bar,
memberB: Baz,
}
und einen Zeiger, ich weiß, ein Zeiger auf memberB
in Foo
ist:
p: *const Baz
Was ist der richtige Weg ist, einen neuen Zeiger p: *const Foo
, die auf die Punkte zu bekommen Originalstruktur Foo
?
Meine aktuelle Implementierung ist die folgende, die ich bin mir ziemlich sicher, dass auf Grunde die Dereferenzierung von (p as *const Foo)
undefiniertes Verhalten aufruft, wo p
auf ein Foo
keinen Zeiger ist:
let p2 = p as usize -
((&(*(p as *const Foo)).memberB as *const _ as usize) - (p as usize));
Dieser Teil von FFI ist - I kann den Code nicht einfach umstrukturieren, um zu vermeiden, dass dieser Vorgang ausgeführt werden muss.
Dies ist sehr ähnlich zu Get pointer to object from pointer to some member aber für Rust, die, soweit ich weiß, keine offsetof
Makro hat.
Warum kann man nicht in einem '* const Foo' an den C-Code übergeben Sie einfach statt? – Shepmaster
In diesem speziellen Beispiel gibt mir der FFI ein '* const Baz', und ich erwarte, dass ich das Originalobjekt daraus abrufe. Wenn ich das ursprüngliche Objekt einfach weitergeben könnte, würde ich das tun, aber das ist keine Option. – Mystor