zoukankan      html  css  js  c++  java
  • this与回调函数

    在c++里回调函数分2种:

    全局函数:不包函在类的内部 或 类内部的静态函数

    类内部函数(或叫 局部函数):需要通过实例化后的对象调用的

    因c++是c的一层封装,所以类似c里struct内的函数

    在传递回调函数时只要保证 函数结构一致就可通过编译检查:

    typedef int TestFun1(int a,int b);
    typedef int (*TestFun2)(int a,int b);//也可这样写 说明需要的是一个地址。 一定要加括号。 因*会与前边混到一起。
    
    void exe(TestFun1 tfun)(
        tfun(1,2);
    }
    
    int tf1(int a,int b){
        return a+b;
    }
    
    //exe(tf1)

    全局函数这样用就可以,但局部函数是不能这样用的,因局部函数是这样的

    class Test1{
    public:
        void fun0(int a);
    }
    void Test1::fun0(int a){
    }
    
    //在调用时 
    
    void main(){
          Test1 *t = new Test1();
           t->fun0(11);//重点在这 这看起来是fun0(),其实是 fun0(t,11);
    }
    //只有fun0(t,11) 才能使fun0内使用this。 this就是t了.

    局部函数是需要 this 的。

    如果像全局函数那样传,在执行回调函数时全局函数不需要this ,而局部函数需要。

    所以局部函数的回调要这样

    class A{
    public:
        int fun0(int a,int b);
    }
    typedef int A::TestFun1(int a,int b);
    typedef int (A::*TestFun2)(int a,int b);//也可这样写 说明需要的是一个地址。 一定要加括号。 因*会与前边混到一起。
    
    void exe(TestFun1 tfun,A *p)(
        (p->*tfun)(1,2);//要加括号 不然机器会这样 p-> *(tfun(1,2))
    }
    
    void main(){
          A *a = new A();
          exe(A::fun0,a);   
    }
  • 相关阅读:
    OpenUrl 的跨平台实现
    通用性站点管理后台(Bee OPOA Platform)
    使用Lucene.net提升网站搜索速度整合记录
    ASP.NET MVC相关
    LeetCode:Copy List with Random Pointer
    ASP.NET交互Rest服务接口(Jquery的Get与Post方式)
    How to Prevent Cross-Site Scripting Attacks
    高性能网站建设指南
    异常
    soket.io.js + angular.js + express.js(node.js)
  • 原文地址:https://www.cnblogs.com/mattins/p/3387853.html
Copyright © 2011-2022 走看看