随笔 - 100  文章 - 0  评论 - 6  阅读 - 88661

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   林西索  阅读(644)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示