(函数指针的传递的两种方式) 运行通过,但我不知原理,大家可否讨论看看.
运行的结果是: I am function_One_Instance I am function_Second_Instance 下面是原代码: #include <windows.h> #include <stdio.h> class CTestFun { public: // 测试函数 void testFunction(void) { // 方法一的使用 function_One_User((PFunction_One)function_One_Instance); // 方法二的使用 function_Second_User(&CTestFun::function_Second_Instance); } protected: // ================================法一:==================================== // 函数类型定义 typedef void function_One(); typedef function_One *PFunction_One; // 函数实例 static void function_One_Instance() { printf("I am function_One_Instance\n"); } // 函数使用者 void function_One_User(PFunction_One function) { function(); } // ================================法二:===================================== // 函数类型定义 typedef BOOL (CTestFun::*function_Second)(int); // 函数实例 BOOL function_Second_Instance(int candidate) { printf("I am function_Second_Instance\n"); return TRUE; } // 函数使用者 BOOL function_Second_User(function_Second function) { if ( (this->*function)(1) == TRUE ) return FALSE; return TRUE; } }; int main() { CTestFun testFun; testFun.testFunction(); system("pause"); return 0; } ==========================================================
对于上面列出的代码,我的问题是:
1、把 if ( (this->*function)(1) == TRUE ) 改为 if ( (/*this->*/*function)(1) == TRUE ) 就会报错: error C2171: “*”: “CTestFun::function_Second”类型的操作数非法 error C2064: 项不会计算为接受 1 个参数的函数 2、 若改为 if ( (/*this->**/function)(1) == TRUE ) 就会报错: error C2064: 项不会计算为接受 1 个参数的函数 这是为什么呢? 为什么一定要加this. 3、BOOL function_Second_User(function_Second function) 中的形参是函数指针而已。 而调用的时候为什么是 function_Second_User(&CTestFun::function_Second_Instance); (加了& ,即函数的指针的指针) 4、 void function_One_User(PFunction_One function) 中的形参是函数的指针的指针, 而调用时为什么是 function_One_User((PFunction_One)function_One_Instance); 只是函数指针? |