5.C++函数指针

 1 int add(int a,int b)
 2 {
 3   return a + b;
 4 }
 5 
 6 int fun(int(*funcAdd)(int x,int y)){       //函数指针.定义一个契约,约定了返回值,输入参数的类型等.
 7   return funcAdd(5,6);
 8 }
 9 
10 int main(int argc, char** argv) {
11   int value = fun(add);
12   std::cout<<value<<std::endl;
13   return 0;
14 }
int Oper(int (*MyPointerFuncAdd)(int a,int b))
{
int c=MyPointerFuncAdd(5,6);//间接调用
}
实现了函数调用和任务的编写可以分开。
这样的话,这要是这个函数类型的函数,传入不同的函数名,就能执行不同的函数体,用这种方法实现了类似于C++中的多态的形式。
 
在工程中,函数指针主要是正向调用和反向调用
其中正向调用指的是从函数体写在动态库中,在动态库中定义函数时,
、都把定义成函数指针类型的。
此时在外面定义一个函数指针变量,通过一个函数就能够把这个函数的首地址取出来,就可以根据这个被赋值以后的变量调用这个函数。这就是正向调用
 
反向调用(回调函数)的用途非常大
动态库==》框架
 
在实际工程中有时一个产品为了适应多个第三方厂商的产品,会给第三方厂商提供一个动态库写成的框架,让厂商们都根据这个框架去开发产品,在动态库里就只是单纯的调用这个函数,在动态库里不写任何函数体,这样就可以适配各个厂商的功能函数。
框架一般是不会变化的,将动态库里面的函数都写成函数指针类型的,在函数体里,再次调用这个函数,这样在动态库里就会回调厂商提供的功能函数。
 
回调函数是利用函数指针实现的一种调用机制
 
回调机制原理
                当具体时间发生时,调用者通过函数指针调用具体函数
                回调机制将调用者和被调函数分开,两者互不依赖。
原文地址:https://www.cnblogs.com/mathyk/p/8796720.html