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