void fun() { cout << "I was called!" << endl; }
void fun1() { cout << "I was called!" << endl; }};
int main(){ // 定义成员函数指针类型 typedef void (AbstractMethod::*MFP)(void);
// 转化函数指针为别的指针 MFP mfp1 = &AbstractMethod::show; unsigned* tmp = (unsigned*)&mfp1; cout << hex << *tmp << endl;
MFP mfp2 = &AbstractMethod::fun; tmp = (unsigned*)&mfp2; cout << hex << *tmp << endl;
MFP mfp3 = &AbstractMethod::fun1; tmp = (unsigned*)&mfp3; cout << hex << *tmp << endl;
// 通过转化后的指针调用成员函数 AbstractMethod am; MFP* addr = (MFP*)tmp; (am.*mfp3)(); (am.*(*addr))();
return 0;}
验证上述方法取得的成员函数地址是否正确:1. 在调试是查看临时变量函数指针的值和输出的是否一样。2. 可以根据调试时的反汇编进行结果验证。3. 最好的办法就是如上例子通过转化后的指针来调用成员函数。
Copyright@戴维 2006.5 于北京