读书人

一个指针的显式类型转换有关问题

发布时间: 2012-09-13 09:51:52 作者: rapoo

一个指针的显式类型转换问题
有如下一段代码:

C/C++ code
#include <iostream.h>      class TClassA   {   public:      void Display(const char* text) { cout << text << endl; };      static void Wrapper_To_Call_Display(void* pt2Object, char* text);      // more....   };   // 静态包装函数,能够调用成员函数Display(),本身做为回调函数来使用   void TClassA::Wrapper_To_Call_Display(void* pt2Object, char* string)   {      // 显式类型转换       TClassA* mySelf = (TClassA*) pt2Object;       // 调用普通成员函数       mySelf->Display(string);   }   // 回调函数的宿主,在这里回调用函数被使用   void DoItA(void* pt2Object, void (*pt2Function)(void* pt2Object, char* text))   {      // 使用回调函数      pt2Function(pt2Object, "hi, i'm calling back using a argument ;-)");    }// 执行示例   void Callback_Using_Argument()   {      TClassA objA;      DoItA((void*) &objA, TClassA::Wrapper_To_Call_Display);//此行void*??????   }

是关于“用静态成员函数对非静态成员函数包装的办法来解决‘类成员函数用做C回调函数’的问题”
请问最后那条代码中的(void*)是怎么来的?显式类型转换?&objA已经取了地址了。我看以前书中好像直接写成&objA就可以了。请指教。。。。。!!

[解决办法]
直接写成&objA就可以,指针类型之间的转化有这样一种规则:任何指针类型都可以隐式转化成void *类型,不需要使用c风格的强制类型转化。
[解决办法]
C/C++ code
(void*) &objA;//可以去掉强制类转换如果可以隐式转换 

读书人网 >C++

热点推荐