您好,我想弄清楚计算类成员的偏移量(以便反转它)是否合法(根据 C++)标准。
class A
{
public:
int a, b, c, d;
};
template <typename ParentClass, typename T>
ParentClass const * offset_this_pointer(T const * member_ptr, T ParentClass::* offset)
{
ParentClass const * parent_p = nullptr;
// we are technically dereferencing a NULL pointer here,
// but we are not using the result, only taking the address of it
// This works and yields the desired result in MSVC 2010, gcc 4.9.2 and Solaris10 compilers.
T const * offset_p = &(parent_p->*offset);
return reinterpret_cast<ParentClass const *>((uintptr_t)member_ptr - (uintptr_t)(offset_p));
}
int main()
{
A a;
assert(&a == offset_this_pointer(&a.b, &A::b)); // passes
return 0;
}
用 parent_p
作为 nullptr
执行 &(parent_p->*offset)
是否合法?
最佳答案
已经争论了一段时间,没有明显的结果。然而,关于实现提供的、标准的祝福的争论是没有意义的offsetof
宏。
关于c++ - 反转指向数据成员的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36480755/