std::binder1st, std::binder2nd
ヘッダ <functional> で定義 | ||
template<class Fn > class binder1st :publicstd::unary_function<typename Fn::second_argument_type, | (1) | (C++11で非推奨) (C++17で削除) |
template<class Fn > class binder2nd :public unary_function<typename Fn::first_argument_type, | (2) | (C++11で非推奨) (C++17で削除) |
二項関数に引数を束縛する関数オブジェクト。
引数の値は構築時にオブジェクトに渡され、オブジェクト内に格納されます。 operator() を通して関数オブジェクトが呼ばれると、格納された値が引数のひとつとして渡され、他の引数は operator() の引数として渡されます。 結果の関数オブジェクトは単項関数です。
value
に束縛します。value
に束縛します。[編集]例
#include <iostream>#include <functional>#include <cmath>#include <vector>constdouble pi =std::acos(-1);int main(){// C++11 で非推奨になり C++17 で削除された古い手法。 std::binder1st<std::multiplies<double>> 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 <<" deg = "<< f1(n)<<" rad (using binder) "<< f2(n)<<" rad (using lambda)\n";}
出力:
0 deg = 0 rad (using binder) 0 rad (using lambda) 30 deg = 0.523599 rad (using binder) 0.523599 rad (using lambda) 45 deg = 0.785398 rad (using binder) 0.785398 rad (using lambda) 60 deg = 1.0472 rad (using binder) 1.0472 rad (using lambda) 90 deg = 1.5708 rad (using binder) 1.5708 rad (using lambda) 180 deg = 3.14159 rad (using binder) 3.14159 rad (using lambda)
[編集]関連項目
(C++11で非推奨)(C++17で削除) | 二項関数に引数を1つ束縛します (関数テンプレート) |