先来不带参数的回调函数例子
#include <iostream> #include <windows.h> void printFunc() { std::cout<<"printFunc"<<std::endl; } void CallFunc(void (*FuncPoint)()) { FuncPoint(); } int main(int argc,char* argv[]) { CallFunc(printFunc); system("pause"); return 0; }
然后带参数的回调函数
#include <iostream> #include <windows.h> void printFunc(int a) { std::cout<<"printFunc : "<<a<<std::endl; } void CallFunc(void (*FuncPoint)(int),int a) { FuncPoint(a); } int main(int argc,char* argv[]) { CallFunc(printFunc,123); system("pause"); return 0; }
函数指针数组的使用
#include <iostream> #include <windows.h> void printFunc1(int a) { std::cout<<"printFunc1 : "<<a<<std::endl; } void printFunc2(int a) { std::cout<<"printFunc2 : "<<a<<std::endl; } int main(int argc,char* argv[]) { void (*funcPointArray[2])(int)={printFunc1,printFunc2}; for (int i=0;i<2;i++) { funcPointArray[i](3); } system("pause"); return 0; }
使用TypeDef来简化上面的代码
#include <iostream> #include <windows.h> typedef void (*FuncPoint)(int); void printFunc1(int a) { std::cout<<"printFunc1 : "<<a<<std::endl; } void printFunc2(int a) { std::cout<<"printFunc2 : "<<a<<std::endl; } int main(int argc,char* argv[]) { //void (*funcPointArray[2])(int)={printFunc1,printFunc2}; FuncPoint funcPointArray[]={printFunc1,printFunc2}; for (int i=0;i<2;i++) { funcPointArray[i](3); } system("pause"); return 0; }
本来我们需要使用:
void (*funcPointArray[2])(int)
其中变量是
funcPointArray[2]
于是 在TypeDef 里 我们用 FuncPoint 来代替这个变量,代替了上面整的一句话。
typedef void (*FuncPoint)(int);
后面使用的时候就用 FuncPoint
FuncPoint funcPointArray[]={printFunc1,printFunc2};