您的位置:首页 > 其它

函数对象和函数适配器的个人理解。我是一个小菜鸡

2016-11-05 00:00 232 查看
函数对象:

重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。又称仿函数

一个类对象,表现出一个函数的特征,就是通过“对象名+(参数列表)”的方式使用一个

类对象,如果没有上下文,完全可以把它看作一个函数对待。这是通过重载类的

operator()来实现的。比如,对于调用

int s = sum(1, 1);

你可能把它看作一个函数调用:

int sum(int i, int j) { return i+j; }

但很可能它是一个函数对象:

class Sum {

public:

int operator()(int i, int j) { return i+j; } //利用类重新定义()操作符。

//运算符重载格式:

函数类型 operator 运算符名称(形参){重载处理}

};

Sum sum;

而大多数情况是

template <class T> //定义类模板

class Sum {

public:

T operator()(T i, T j) { return i+j; }

};

Sum <int> sum; //与template <class T>

“在标准库中,函数对象被广泛地使用以获得弹性”,标准库中的很多算法都可以

使用函数对象或者函数来作为自定的回调行为;

预定义的函数对象学习:

Greater<int>() (包含两个参数)比较大小,前一个参数为容器,后一个参数可以通过函数适配器bind2nd绑定为第二个参数;

Modular<int>()(包含两个参数)求模;使用同上;

函数适配器:

组合函数对象。函数适配器,用于扩展一元和二元函数对象,如functor 函数对像等等。用于容器与算法之前的操作时使用。(有调节原始函数对象的作用)多使用预定义好的函数适配器。

学到的函数适配器:

bind1st(); 绑定第一个参数

Bind2nd();绑定第二个参数

Not1();取反,1表示一元谓词

Not2(); 取反,2表示二元谓词
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐