知识大全 怎样将成员函数指针强制转换成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

相关参考