C语言中如果我们要定义一个函数指针,比如如下的两个函数:
int numAdd(int a, int b)
{
return a+b;
}
int numMinus(int a, int b)
{
return a-b;
}
我们可以定义一个指针:
int (*funcTwo)(int, int) = numAdd;
这样就可以直接用funcTwo(1, 2)来实现 numAdd(1,2)的功能了。
一般更通用的做法是把函数当做一个参数来参与逻辑的执行:
typedef int (*PtrFuncTwo)(int, int);
int algo(int a, int b , PtrFuncTwo pft)
{
return pft(a, b);
}
int _tmain(int argc, _TCHAR* argv[])
{
int a = algo(1, 2, numAdd);
return 0;
}
这样我们就可以在运行通过逻辑的不同,给algo传递不同的PtrFuncTwo的函数指针,来实现对数据进行不同过的逻辑处理。
C++中引入了类的概念,如果定义一个指向类的成员函数的指针呢?语法如下
class CA{
public:
int caAdd(int a, int b) {return a+b;}
int caMinus(int a, int b){return a-b;};
};
class CB{
public:
int cbAdd(int a, int b){return a*b;}
int cbMinus(int a, int b){return a/b;}
};
typedef int (CA::*PtrCaFuncTwo)(int ,int);
PtrCaFuncTwo pft= &CA::caAdd;
CA ab;
int c = (ab.*pft)(1,2);
通过 一下命令定义一个指向CA一个函数的指针类型
typedef int (CA::*PtrCaFuncTwo)(int ,int);
然后定义一个该类型的一个指针,并将CA的caAdd函数地址付给这个指针:
PtrCaFuncTwo pft= &CA::caAdd;
当使用时,通过对象的 (ab.*pft)(1,2), 来使用这个函数。如果我们实现上面C语言那样的功能,可以用如下代码:
int algoEx(int a, int b, PtrCaFuncTwo pcft, CA* pca)
{
return (pca->*pcft)(a, b);
}
上面演示了如果通过一个对象的指针,一个指向类的成员函数的指针来进行函数调用的例子。