zoukankan      html  css  js  c++  java
  • 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++中的多态的形式。
     
    在工程中,函数指针主要是正向调用和反向调用
    其中正向调用指的是从函数体写在动态库中,在动态库中定义函数时,
    、都把定义成函数指针类型的。
    此时在外面定义一个函数指针变量,通过一个函数就能够把这个函数的首地址取出来,就可以根据这个被赋值以后的变量调用这个函数。这就是正向调用
     
    反向调用(回调函数)的用途非常大
    动态库==》框架
     
    在实际工程中有时一个产品为了适应多个第三方厂商的产品,会给第三方厂商提供一个动态库写成的框架,让厂商们都根据这个框架去开发产品,在动态库里就只是单纯的调用这个函数,在动态库里不写任何函数体,这样就可以适配各个厂商的功能函数。
    框架一般是不会变化的,将动态库里面的函数都写成函数指针类型的,在函数体里,再次调用这个函数,这样在动态库里就会回调厂商提供的功能函数。
     
    回调函数是利用函数指针实现的一种调用机制
     
    回调机制原理
                    当具体时间发生时,调用者通过函数指针调用具体函数
                    回调机制将调用者和被调函数分开,两者互不依赖。
  • 相关阅读:
    【写一个自己的js库】 5.添加修改样式的方法
    【写一个自己的js库】 4.完善跨浏览器事件操作
    js跑马灯效果
    jquery hover延时
    chart
    【写一个自己的js库】 3.添加几个处理字符串的方法
    【写一个自己的js库】 2.实现自己的调试日志
    django踩坑记录
    单元测试框架unittest-3
    单元测试框架unittest-2
  • 原文地址:https://www.cnblogs.com/mathyk/p/8796720.html
Copyright © 2011-2022 走看看