C++获取类成员函数地址
https://cloud.tencent.com/developer/article/1394302 (opens new window)
#include <stdio.h>
#include <iostream>
using namespace std;
class Base
{
int i;
public:
virtual void f1()
{
cout<<"Base's f1()"<<endl;
}
};
int main() {
A *p = new B;
p->func1();
Base *b = new Drive;
void (Base::*mfp)() = &Base::f1; //这里取到的是Base的函数地址
printf("address: %p\n", (void*)(b->*mfp));
typedef void(*Base_f1_t)();
Base_f1_t(b->*mfp)(); //这里仍然是Base's f1()
}
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
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
这种方法可以获取到函数地址,也可以调用函数执行,但是如果函数是虚函数,则会编译错误。
编辑 (opens new window)
上次更新: 2023/05/07, 17:27:54