linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > ASP >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·由HTTP 500 Internal server e
·会员系统“找回密码”的制作方
·简单的asp验证码程序示例
·ASP实现数字和字母组合并生成图
·如何用foreach遍历页面上所有的
·用ASP制作强大的搜索引擎
·如何让图片自动缩放以适合界面
·如何实现站点的RSS输出
·采用XMLHTTP编写一个天气预报的
·ASP如何获取真实IP地址
·无组件实现文件上传/下载
·asp中如何调试 ASP 脚本
·asp+ajax打造无刷新新闻评论系
·典型Datagrid分页、排序、删除
·asp中如何使用 HTML 表格
最新文章
·ASP教程:8、ASP内建对象Respo
·ASP教程:7、ASP内建对象Reque
·ASP教程:6、ASP脚本循环语句
·ASP教程:5、ASP脚本变量、函数
·ASP教程:4、ASP脚本基础
·ASP教程:3、ASP基础
·ASP教程:2、ASP简介
·ASP教程:1、Are you ready?
·ASP中使用SQL语句教程
·ASP进度条
·由HTTP 500 Internal server e
·Asp无组件生成缩略图
·ASP 系列函数大全(4)
·ASP 系列函数大全(3)
·ASP 系列函数大全(2)
Google
 
怎样将成员函数指针强制转换成void*指针?
[ 作者:  加入时间:2007-09-29 17:19:49  来自:Linux联盟收集整理 ]
采用取成员函数指针的地址的方法,先把指向成员函数指针的指针强制转化为别的类型,如unsigned*,当然同样可以通过此转化后的指针经过相反的变换来调用成员函数。于是乎要转化为void*的问题也随之可解,如下示例:2VBLinux联盟
/* VS2003下编译运行 */2VBLinux联盟
class AbstractMethod2VBLinux联盟
{2VBLinux联盟
public:2VBLinux联盟
 virtual void show(){}  // = 0;  // 可以是纯虚函数,这里为了测试方便不使用纯虚函数!

 void fun()2VBLinux联盟
 {2VBLinux联盟
  cout << "I was called!" << endl;2VBLinux联盟
 }

 void fun1()2VBLinux联盟
 {2VBLinux联盟
  cout << "I was called!" << endl;2VBLinux联盟
 }2VBLinux联盟
};

int main()2VBLinux联盟
{2VBLinux联盟
 // 定义成员函数指针类型2VBLinux联盟
 typedef void (AbstractMethod::*MFP)(void);

 // 转化函数指针为别的指针2VBLinux联盟
 MFP mfp1 = &AbstractMethod::show;  2VBLinux联盟
 unsigned* tmp =  (unsigned*)&mfp1;2VBLinux联盟
 cout << hex << *tmp << endl;

 MFP mfp2 = &AbstractMethod::fun;2VBLinux联盟
 tmp = (unsigned*)&mfp2;2VBLinux联盟
 cout << hex << *tmp << endl;

 MFP mfp3 = &AbstractMethod::fun1;2VBLinux联盟
 tmp = (unsigned*)&mfp3;2VBLinux联盟
 cout << hex << *tmp << endl;

 // 通过转化后的指针调用成员函数2VBLinux联盟
 AbstractMethod am;2VBLinux联盟
 MFP* addr = (MFP*)tmp;2VBLinux联盟
 (am.*mfp3)();2VBLinux联盟
 (am.*(*addr))();

 return 0;2VBLinux联盟
}

验证上述方法取得的成员函数地址是否正确:2VBLinux联盟
1. 在调试是查看临时变量函数指针的值和输出的是否一样。2VBLinux联盟
2. 可以根据调试时的反汇编进行结果验证。2VBLinux联盟
3. 最好的办法就是如上例子通过转化后的指针来调用成员函数。

Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
无相关信息