当提供指向该变量的指针时,我想获得标准布局成员变量的偏移量。我不能使用offsetof
,因为我有一个指针而不是一个名字。我当前的代码看起来像这样,我想知道是否有一种符合标准的方法来摆脱dummy
变量。
template<class T>
struct {
ptrdiff_t get_offset( int (T::*mem) )
{
T dummy;
return reinterpret_cast<char*>(&(dummy.*mem))
- reinterpret_cast<char*>(&dummy);
}
};
这个函数应该只能用int
成员变量点调用(这是故意的)。
我很确定编译器实际上并没有创建dummy
变量,但如果我能摆脱它仍然会很好。我不能使用空指针,因为未定义取消引用 null(尽管它可能适用于所有常见的编译器)。C++03 解决方案会很好,或者 C++11 解决方案也很有趣(但我现在不能使用)。
注意:我已经知道这只是符合标准的 T 是标准布局类型。