【发布时间】:2016-08-07 23:40:20
【问题描述】:
我有一个类型:
struct Foo {
memberA: Bar,
memberB: Baz,
}
而我知道的一个指针是指向Foo 中的memberB 的指针:
p: *const Baz
获取指向原始结构 Foo 的新指针 p: *const Foo 的正确方法是什么?
我当前的实现如下,由于(p as *const Foo) 的取消引用,我很确定它会调用未定义的行为,其中p 不是指向Foo 的指针:
let p2 = p as usize -
((&(*(p as *const Foo)).memberB as *const _ as usize) - (p as usize));
这是 FFI 的一部分 - 我无法轻松地重构代码以避免需要执行此操作。
这与 Get pointer to object from pointer to some member 非常相似,但对于 Rust,据我所知没有 offsetof 宏。
【问题讨论】:
-
为什么不能直接将
*const Foo传递给C 代码? -
在这个特定的例子中,FFI 给了我一个
*const Baz,我应该从中检索原始对象。如果我可以简单地传递原始对象,我会,但这不是一个选择。