分享

C++静态成员函数 调用非静态成员函数

 quasiceo 2014-01-15

        “海葵”真厉害,心情也很不爽。难道以后真的要做生产流水线上的IT民工么?

 

  1. #include <iostream>  
  2.   
  3. typedef void (__cdecl *CF)(void* _THIS, const void* _Param);  
  4.   
  5. class A  
  6. {  
  7. public:  
  8.     A():m_A(5)  
  9.     {}  
  10.   
  11.     void __cdecl say(const char* _str)  
  12.     {  
  13.         std::cout<<"Hello "<<_str<<std::endl;  
  14.         std::cout<<m_A<<std::endl;  
  15.     }  
  16.       
  17.     static __stdcall void AA(void * _THIS, CF _fn,  void* _Param)  
  18.     {  
  19.         _fn(_THIS, (const char*)_Param);  
  20.     }  
  21.   
  22. private:  
  23.     int m_A;  
  24. };  
  25.   
  26. class B  
  27. {  
  28. public:  
  29.     B():m_B(55)  
  30.     {  
  31.       
  32.     }  
  33.   
  34. public:  
  35.       void __cdecl Show(const char* _str)  
  36.       {  
  37.           std::cout<<_str<<" "<<m_B<<std::endl;  
  38.       }  
  39. private:  
  40.     int m_B;  
  41. };  
  42. template<class ADDRESS, class PFN>  
  43. void change(ADDRESS& _add, PFN _pFn)  
  44. {  
  45.     union  
  46.     {  
  47.         ADDRESS _newaddr;  
  48.         PFN     _newpFn;  
  49.     }t;  
  50.   
  51.     t._newpFn   = _pFn;  
  52.     _add        = t._newaddr;  
  53.   
  54.     return;  
  55. }  
  56.   
  57. int main()  
  58. {  
  59.       
  60.     A test;  
  61.     B test2;  
  62.   
  63.     unsigned int THIS = reinterpret_cast<unsigned int>(&test);  
  64.     unsigned int address = -1;  
  65.   
  66.     //通过第三方函数指针做中转站  
  67.     change(address, &A::say);  
  68.     CF a= reinterpret_cast<CF>(address);  
  69.     const char *str ="World";  
  70.   
  71.     A::AA((void*)&test, a, (void*)(str));  
  72.       
  73.     change(address, &B::Show);  
  74.     a= reinterpret_cast<CF>(address);  
  75.     A::AA((void*)&test2, a, (void*)(str));  
  76.       
  77.   
  78.     return 0;  
  79. }  


 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多