根据类成员获取类指针
根据类成员地址的偏移获取类指针
template <class P, class M> size_t my_offsetof(const M P::*member) { return (size_t) & (reinterpret_cast<P *>(0)->*member); } template <class P, class M> P *my_container_of_impl(M *ptr, const M P::*member) { return reinterpret_cast<P *>(reinterpret_cast<char *>(ptr) - my_offsetof(member)); } //这里的意思是根据成员变量,获取类对象的地址,从而转成当前类对象 #define my_container_of(ptr, type, member) my_container_of_impl(ptr, &type::member) class SpeechListener { client m_endpoint; } void OnOpen(client *c, websocketpp::connection_hdl hdl) { SpeechListener *listener = my_container_of(c, SpeechListener, m_endpoint); }
这里主要使用了 零地址转换
#define OFFSET(structure, member) ((int)&((structure*)0)->member);
第二种方式
struct A { int i; char a; int j; string str1; int m; int n; }; std::cout << "offset:"<< (size_t) &((A*)0)->str1<<endl; std::cout << "offset:"<< (size_t) &((A*)0)->m<<endl; std::cout << "offset:"<< (size_t) &((A*)0)->n<<endl; string A::*jOffset = &A::str1; int nJOffSet = (size_t)(*(void**)(&jOffset));
上一篇:
通过多线程提高代码的执行效率例子