std::binder1st, std::binder2nd
|   在标头  <functional> 定义
  | 
||
|   template< class Fn > class binder1st :  | 
(1) |  (C++11 中弃用)  (C++17 中移除)  | 
|   template< class Fn > class binder2nd :  | 
(2) |  (C++11 中弃用)  (C++17 中移除)  | 
绑定实参到二元函数的函数对象。
在构造时将形参的值传递给对象并在对象中存储。每当通过 operator() 调用函数对象时,都会将存储的值作为实参之一传递,将另一实参作为 operator() 的实参传递。产生的函数对象是一元函数。
示例
#include <iostream> #include <functional> #include <cmath> #include <vector> const double pi = std::acos(-1); int main() { // C++11 中弃用,C++17 中移除 auto f1 = std::bind1st(std::multiplies<double>(), pi / 180.); // C++11 的替代方案 auto f2 = [](double a){ return a * pi / 180.; }; for (double n : {0, 30, 45, 60, 90, 180}) std::cout << n << " 度\t" << std::fixed << "= " << f1(n) << " 弧度(使用绑定器)\t=" << f2(n) << " 弧度(使用 lambda)\n" << std::defaultfloat; }
输出:
0 度 = 0.000000 弧度(使用绑定器) =0.000000 弧度(使用 lambda) 30 度 = 0.523599 弧度(使用绑定器) =0.523599 弧度(使用 lambda) 45 度 = 0.785398 弧度(使用绑定器) =0.785398 弧度(使用 lambda) 60 度 = 1.047198 弧度(使用绑定器) =1.047198 弧度(使用 lambda) 90 度 = 1.570796 弧度(使用绑定器) =1.570796 弧度(使用 lambda) 180 度 = 3.141593 弧度(使用绑定器) =3.141593 弧度(使用 lambda)
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 | 
|---|---|---|---|
| LWG 109 | C++98 |  operator() 无法修改传递给它的实参
 | 
添加重载以处理这种情况 | 
参阅
|    (C++11 中弃用)(C++17 中移除)  | 
   将一个实参绑定到二元函数   (函数模板)  |