函数类型和函数对象
在C和C++中,函数也是一种类型,原因是可以指向函数的指针。这个指针指向了内存中函数的入口处。(多么有趣的现象!因为这一下子把程序和进程的概念似乎又引入进来了!)
void (*fPtr)(int );//这是一个变量的定义,指针变量
由于函数是一种类型,我也就可以使用typedef关键字:
对于函数:void function (int a);
有
typedf void FUNCTION (int a);//定义一种函数类型
FUNCTION *p=fPtr;//p是指向上面定义的函数类型的指针
int b=1;
fPtr(b);//调用函数
————————————————————————————————————————————————————————————
函数对象
看下面的一段代码:
int a=b=3;
int c=sum(a,b);
这里sum可以被理解为int sum(int,int)这样的函数。
但是,这有个缺点,如果上面的代码换为:
float a=b=3.0;
float c=sum(a,b);
那么sum作为一个函数的原型,就必须实现各参数类型对应的函数重载。当然,我们还有更灵活的方法来实现:
template<class T> class Sum{ public: sum(){}; T operator()(T a, T b){ return a+b } };
Sum<int> sum;
函数对象不是函数,它是一个借用了操作符()重载实现类似于函数调用的功能。