怎样将成员函数指针强制转换成void*指针?

原创 2006年05月23日 16:48:00

    采用取成员函数指针的地址的方法,先把指向成员函数指针的指针强制转化为别的类型,如unsigned*,当然同样可以通过此转化后的指针经过相反的变换来调用成员函数。于是乎要转化为void*的问题也随之可解,如下示例:
/* VS2003下编译运行 */
class AbstractMethod
{
public:
 virtual void show(){}  // = 0;  // 可以是纯虚函数,这里为了测试方便不使用纯虚函数!

 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  于北京 

成员函数指针:(结构+与普通函数指针之间的转换)

通过网上查找发现: zailinux
  • liaoyoujinb
  • liaoyoujinb
  • 2014年07月19日 17:18
  • 970

C++之指向数据成员的指针和指向成员函数的指针

这里指向数据成员的指针和指向成员函数的指针与指向变量的指针和指向函数的指针进行对比来解释,比较好理解一些。指向变量的指针和指向函数的指针先举个例子:void func(int a, int b){ ...
  • maoliran
  • maoliran
  • 2016年06月02日 20:23
  • 1600

万恶的void*指针类型转换

大家都知道:用一个基类的指针指向一个派生类的对象是合理的,然而很多人却忽略了这样做的大前提:必须使用规范的指针转换过程。 最近要添加一个功能,上层代码为此新增了一个虚函数接口。我一看,此虚函数所在的...
  • qq_21895115
  • qq_21895115
  • 2015年05月11日 07:05
  • 2357

【编程开发】 C与C++中的关于函数指针的强制类型转换与指针函数的关系

【编程开发】 C与C++中的关于函数指针的强制类型转换与指针函数的关系标签: 【编程开发】 【VS开发】声明:引用请注明出处http://blog.csdn.net/lg1259156776/以qso...
  • LG1259156776
  • LG1259156776
  • 2015年11月11日 10:27
  • 2239

c++ 父类指针转换为子类指针后调用子类的成员函数问题

#include using namespacestd ; class A{ public: void display(){cout
  • mark555
  • mark555
  • 2014年04月12日 10:39
  • 1131

无类型指针void*的学习与使用

C/C++中的指针介绍和void*指针的学习
  • playboy_lei
  • playboy_lei
  • 2016年01月22日 12:28
  • 4615

C语言中的函数指针类型转换

今天在看PHP5.3源码中zend_API.h中的
  • xiaogugood
  • xiaogugood
  • 2014年06月30日 11:54
  • 4130

c++父类指针强制转为子类指针后的测试(帮助理解指针访问成员的本质)(反多态)

看下面例子: #include "stdafx.h" #include class A {  //父类 public:     void  f()   //普通函数   {      ...
  • yangyangye
  • yangyangye
  • 2014年07月30日 18:01
  • 1245

C++成员变量指针和成员函数指针

深度探索C++对象模型这本书还有提到C++类的成员变量指针和成员函数指针,虽然在实际开发中用的不多,但是还是需要理解下。一:成员变量指针1.1 非静态成员指针类成员变量指针,实际上并不是真正意义上的指...
  • LaoJiu_
  • LaoJiu_
  • 2017年04月01日 18:00
  • 810

如何使用指向类的成员函数的指针(详解!)

我们首先复习一下"指向函数的指针"如何使用?   void print()   {   }   void (*pfun)(); //声明一个指向函数的指针,函数的参数是 void,函数的返回值是 vo...
  • lishuhuakai
  • lishuhuakai
  • 2014年01月14日 22:13
  • 26728
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:怎样将成员函数指针强制转换成void*指针?
举报原因:
原因补充:

(最多只允许输入30个字)