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);   
}
原文地址:https://www.cnblogs.com/mattins/p/3387853.html