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); }