知识大全 怎样将成员函数指针强制转换成void*指针
Posted 指针
篇首语:青春须早为,岂能长少年。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 怎样将成员函数指针强制转换成void*指针相关的知识,希望对你有一定的参考价值。
采用取成员函数指针的地址的方法 先把指向成员函数指针的指针强制转化为别的类型 如unsigned* 当然同样可以通过此转化后的指针经过相反的变换来调用成员函数 于是乎要转化为void*的问题也随之可解 如下示例 /* VS 下编译运行 */class AbstractMethodpublic: virtual void show() // = ; // 可以是纯虚函数 这里为了测试方便不使用纯虚函数!
void fun() cout << I was called! << endl;
void fun () cout << I was called! << endl; ;
int main() // 定义成员函数指针类型 typedef void (AbstractMethod::*MFP)(void);
// 转化函数指针为别的指针 MFP mfp = &AbstractMethod::show; unsigned* tmp = (unsigned*)&mfp ; cout << hex << *tmp << endl;
MFP mfp = &AbstractMethod::fun; tmp = (unsigned*)&mfp ; cout << hex << *tmp << endl;
MFP mfp = &AbstractMethod::fun ; tmp = (unsigned*)&mfp ; cout << hex << *tmp << endl;
// 通过转化后的指针调用成员函数 AbstractMethod am; MFP* addr = (MFP*)tmp; (am *mfp )(); (am *(*addr))();
return ;
验证上述方法取得的成员函数地址是否正确 在调试是查看临时变量函数指针的值和输出的是否一样 可以根据调试时的反汇编进行结果验证 最好的办法就是如上例子通过转化后的指针来调用成员函数
cha138/Article/program/net/201311/13364相关参考