注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

(转载)C++小知识43--C++小知识17之C++静态成员函数 调用非静态成员函数续  

2013-09-24 15:40:19|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
(转载)C++小知识43--C++小知识17之C++静态成员函数 调用非静态成员函数续
http://www.oschina.net/question/234345_65961
#include <iostream>  
  
typedef void (__cdecl *CF)(void* _THIS, const void* _Param);  
  
class A  
{  
public:  
    A():m_A(5)  
    {}  
  
    void __cdecl say(const char* _str)  
    {  
        std::cout<<"Hello "<<_str<<std::endl;  
        std::cout<<m_A<<std::endl;  
    }  
      
    static __stdcall void AA(void * _THIS, CF _fn,  void* _Param)  
    {  
        _fn(_THIS, (const char*)_Param);  
    }  
  
private:  
    int m_A;  
};  
  
class B  
{  
public:  
    B():m_B(55)  
    {  
      
    }  
  
public:  
      void __cdecl Show(const char* _str)  
      {  
          std::cout<<_str<<" "<<m_B<<std::endl;  
      }  
private:  
    int m_B;  
};  
template<class ADDRESS, class PFN>  
void change(ADDRESS& _add, PFN _pFn)  
{  
    union  
    {  
        ADDRESS _newaddr;  
        PFN     _newpFn;  
    }t;  
  
    t._newpFn   = _pFn;  
    _add        = t._newaddr;  
  
    return;  
}  
  
int main()  
{  
      
    A test;  
    B test2;  
  
    unsigned int THIS = reinterpret_cast<unsigned int>(&test);  
    unsigned int address = -1;  
  
    //通过第三方函数指针做中转站  
    change(address, &A::say);  
    CF a= reinterpret_cast<CF>(address);  
    const char *str ="World";  
  
    A::AA((void*)&test, a, (void*)(str));  
      
    change(address, &B::Show);  
    a= reinterpret_cast<CF>(address);  
    A::AA((void*)&test2, a, (void*)(str));  
      
  
    return 0;  
}  
  评论这张
 
阅读(396)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017