类模板
<functional>
std::binder2nd
template <class Operation> class binder2nd;
生成绑定了第二个参数的函数对象类
通过绑定第二个参数为固定值,从二元对象类*Operation*生成一元函数对象类。
binder2nd通常用作一个类型。可以使用函数
bind2nd(也在头文件
<functional>中定义)直接构造该类型的对象。
binder2nd使用*二元函数对象*作为参数进行构造。该对象的副本在其成员
operator()中用于通过其参数和构造时设置的固定值生成结果。
该类派生自
unary_function,通常定义为
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
template <class Operation> class binder2nd
: public unary_function <typename Operation::first_argument_type,
typename Operation::result_type>
{
protected:
Operation op;
typename Operation::second_argument_type value;
public:
binder2nd ( const Operation& x,
const typename Operation::second_argument_type& y) : op (x), value(y) {}
typename Operation::result_type
operator() (const typename Operation::first_argument_type& x) const
{ return op(x,value); }
};
|
binder2nd类特别设计用于绑定派生自
binary_function的函数对象(*操作*)(它需要成员
first_argument_type和
second_argument_type).
成员
- 构造函数
- 通过将二元函数对象的第二个参数绑定到一个值,来构造一个派生自该二元函数对象的类。
- operator()
- 成员函数接收单个参数,并调用用于构造的二元函数对象,将其第二个参数绑定到特定值,然后返回结果。
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
// binder2nd example
#include <iostream>
#include <functional>
#include <algorithm>
using namespace std;
int main () {
binder2nd < less<int> > IsNegative (less<int>(),0);
int numbers[] = {10,-20,-30,40,-50};
int cx;
cx = count_if (numbers,numbers+5,IsNegative);
cout << "There are " << cx << " negative elements.\n";
return 0;
}
|
输出
There are 3 negative elements.
|
另见
- bind2nd
- 返回第二个参数被绑定的函数对象 (函数模板)
- binder1st
- 生成第一个参数被绑定的函数对象类 (类模板)
- unary_function
- 一元函数对象基类 (类模板)
- binary_function
- 二元函数对象基类 (类模板)