根据类成员获取类指针

根据类成员地址的偏移获取类指针

template 
size_t my_offsetof(const M P::*member) {
    return (size_t) & (reinterpret_cast

(0)->*member); } template P *my_container_of_impl(M *ptr, const M P::*member) { return reinterpret_cast

(reinterpret_cast(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<m<n<

你可能感兴趣的:(学习,c++)