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(,);
} 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();//重点在这 这看起来是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)(,);//要加括号 不然机器会这样 p-> *(tfun(1,2))
} void main(){
A *a = new A();
exe(A::fun0,a);
}
上一篇:C# 中使用 Excel


下一篇:UESTC 618 无平方因子数 ( 莫比乌斯)