函数指针获取成员函数地址(包括虚函数)

++
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
32
33
34
35
36
37
38
39
class Base
{
public:
void func() { printf("Enter Base::func()\n"); }
virtual void virtual_func() { printf("Enter Base::virtual_func()\n"); }
};
class Derived : public Base
{
public:
void func() { printf("Enter Derived::func()\n"); }
virtual void virtual_func() { printf("Enter Derived::virtual_func()\n"); }
};
typedef void (Base::*p_base_func)();
int main(int argc, char* argv[])
{
Derived d;
Base b;
Base *pb = &d;
p_base_func pbf = &Base::func;
printf("-- Call via pointer to normal function of base\n");
(pb->*pbf)();
(d.*pbf)();
cout << endl;
//cout << (pb->*pbf) << endl;
cout << endl << endl;
pbf = &Base::virtual_func;
printf("-- Call via pointer to virtual function of base\n");
(pb->*pbf)();
(d.*pbf)();
//cout << (pb->*pbf) << endl;
system("pause");
return 0;
}

注释部分会发生编译器内部错误。我也不知道为什么?

看代码,为成员函数添加一个引用(支持虚函数)。
然后利用对象调用函数。
貌似,只能利用对象才能成功。

// //