我用的MinGW 4.8可以啊。你那不行的话我再想个办法吧,用联合体中转,见demo,看在你那能不能跑起来。#include
#include
using namespace std;
class A {
public:
void f() { cout <
void g() { cout <
};
typedef void (A::*AFuncPtr)();
typedef int *IntPtr;
union UPtr {
AFuncPtr pa;
IntPtr pi;
};
void test(int *pi) {
UPtr up;
memset(&up, 0, sizeof(up));
up.pi = pi; //设置联合体的值
AFuncPtr pa = up.pa; //按函数指针取出值
A a;
(a.*pa)(); //调用成员函数
}
int main() {
UPtr up1, up2; //利用联合体做中转
up1.pa = &A::f; //设置联合体的值
up2.pa = &A::g;
int *p1, *p2;
p1 = up1.pi; //取出转换成的int *
p2 = up2.pi;
test(p1); //测试转换后能不能利用这个int *调用成员函数
test(p2);
return 0;
}