之前一直不太明白函数指针做函数参数,为什么有回调函数。今天总算明白了,记录下。
函数指针做函数参数可以实现调用者与实现者进行了分离,在保证外部调用框架不变的情况下,只需要给不同的函数指针即可实现不同的作用,有点类似于C++的多态。
测试代码如下:
int addFunc(int a, int b)
{
cout << "addFunc..."<<endl;
return a + b;
}
int addFuncA(int a, int b)
{
cout << "addFuncA..."<<endl;
return a + b;
}
int addFuncB(int a, int b)
{
cout << "addFuncB..."<<endl;
return a + b;
}
int addFuncC(int a, int b)
{
cout << "addFuncC..."<<endl;
return a + b;
}
typedef int (*MyFuncType)(int a, int b);
int MyFuncTest(MyFuncType pTest)
{
int c = pTest(3,4);
return c;
}
int MyFuncTest1(int (*MyFucn1)(int a, int b)) //间接调用 与 上面MyFuncTest 一样
{
int c = MyFucn1(1,2);
return c;
}
int main()
{
MyFuncType pMyFunc = NULL;
pMyFunc = addFunc;
pMyFunc(1,2);
MyFuncTest(pMyFunc);
MyFuncTest1(addFunc);
//框架不变,可以实现任意调用 最终实现了任务调用者与实现者进行了分离
MyFuncTest(addFuncA);
MyFuncTest(addFuncB);
MyFuncTest(addFuncC);
return 0 ;
}
回调函数的本质:提前做了一个协议约定(把函数的参数,返回值类型提前约定)。