C++ ---获取类成员函数地址

#include <iostream>

class TA
{
public:
    int a;

    void TA1() 
    {
        //this->a = 5;
        printf("a=%d\n", a); 
    }

    void TA2()
    {
        printf("hha\n");
    }
};

union UU
{
    void* p;
    void(TA::*pfn)();
};

typedef void(*Func)(TA*);

int main(int argc, char** argv)
{
    TA ta;
    ta.a = 2;

    UU u;
    u.pfn = &TA::TA1;
    printf("%p\n", (char*)u.p);

    Func jj = (Func)((char*)u.p);
    jj(&ta);

    printf("%p\n", (char*)u.p + 0xbe);//两个函数的地址相差0xbe, 这个值是预先调试看的。
    Func jj1111 = (Func)((char*)u.p + 0xbe);
    jj1111(&ta);

    u.pfn = &TA::TA2;
    printf("%p\n", (char*)u.p);
    
    Func jj2 = (Func)((char*)u.p);
    jj2(&ta);
    
    
    std::cout << &TA::TA1 << std::endl;

    return 0;
}

简单来说就是 通过union的特性来获取到地址。

参考:https://blog.csdn.net/lhh_qrsly/article/details/124937814

posted on 2022-11-28 11:12  林西索  阅读(714)  评论(0)    收藏  举报