定义一个指向函数的指针,例如:
int cuckoo(int baby);
则可以这样来定义一个指向该函数的指针:
int (*pCuckoo)(int);
如果想定义所有函数指针的类型(可以方便的声明多个变量),则可以这样来做:
typedef int(*)(int) FunPointerType;
利用该类型声明一个函数指针如下:
FunPointerType pCuckoo;
FunPointerType pShrimp;
好了,既然我们有了函数指针,那么怎么样来对其进行初始化呢?
It's a piece of cake!
pCuckoo = &cuckoo;
pShrimp = &cuckoo;
ok, 怎么使用他们呢?废话少说,很简单:
pCuckoo(3);
or (*pCuckoo)(3);
就这么简单了!
不过在实际使用过程中,有些函数的参数就是一个函数指针,例如:
void Test(int(*f)(int));
那么怎么调用Test呢?更简单了:
Test(pCuckoo);
呵呵,是不是大功告成?
别急,有时候我们会碰到这样一个问题,如果想把一个类中的成员函数当作参数传给Test,也可以这样子做吗?
呵呵,你试一下:
Class A
{
A()
{
Test(try);
};
~A();
int try(int nTimes);
}
哼哼,编译器会毫不留情地告诉你,有问题了!
为什么会这个样子呢?答案也比较简单:所有成员函数的参数列表中都隐藏了一个this指针(记起来了吧?),这样的话,try成员函数的参数列表当然与Test函数所需要的不同了,编译器不报错就怪了!
怎么办?还是比较简单:
解决方案就是将这个成员函数改成static,这样就ok了!
好了,还有什么我没有说清楚的吗?请发email至alittleshrimp@gmail.com 欢迎骚扰!:)