在一个论坛的帖子里看到了,觉得有用,收藏一下:
template<class T>
long mem_offset(long T::* off){ //求类成员off在类T中的偏移量
return *(long *)&off;
}
#define MEM_OFFSET(TYPE,MEMBER) (mem_offset<TYPE>((long TYPE::*)&TYPE::MEMBER))
测试:
#include <iostream>
using namespace std;
struct X
{
int a;
double b;
};
int main()
{
cout<<MEM_OFFSET(X,a)<<endl; //0
cout<<MEM_OFFSET(X,b)<<endl; //8
}