给定 C++ 中的类定义
class A
{
public:
//methods definition
....
private:
int i;
char *str;
....
}
是否可以使用 C++ 模板元编程在编译时计算类成员的偏移量?该类不是 POD,并且可以具有虚拟方法、基元和对象数据成员。
基于 Matthieu M. 的答案,但更短且没有宏:
template<typename T, typename U> constexpr size_t offsetOf(U T::*member)
{
return (char*)&((T*)nullptr->*member) - (char*)nullptr;
}
它的名字是这样的:
struct X { int a, b, c, d; }
std::cout << "offset of c in X == " << offsetOf(&X::c);
Edit:
杰森·赖斯是对的。这不会在 C++11 中产生实际的常量表达式。鉴于限制,这看起来不可能http://en.cppreference.com/w/cpp/language/constant_expression http://en.cppreference.com/w/cpp/language/constant_expression-- 特别是没有指针差异和reinterpret_cast
可以在常量表达式中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)