一个指针的显式类型转换问题
有如下一段代码:
- 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;//可以去掉强制类转换如果可以隐式转换