函数类型和函数对象

在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;

  函数对象不是函数,它是一个借用了操作符()重载实现类似于函数调用的功能。

原文地址:https://www.cnblogs.com/wangpei0522/p/3795520.html