3.3.2. pfi::lang::bind¶
3.3.2.1. 概要¶
stlには、bind1st, bind2ndという、2引数関数の1つめ、2つめを固定した関数オブジェクトを返す関数があるが、 不便なのと、2引数以外に使えないのは良くないので、 これを任意の数の引き数、さらには引数の順番も任意にして超一般化したものがbindである。
Deprecated since version 4.0: この機能はC++11からSTLで提供されるようになったため、
後方互換性の維持のために残しているものの、 std::bind
の利用を推奨する。
3.3.2.2. 使い方¶
1引数目に関数オブジェクトを指定する。 2引数目以降に実引数もしくはプレースホルダを指定する。 プレースホルダは_1, _2, .. _9の名前で定義されており、 それぞれ1引数目、2引数目、…に対応している。 1引数目に指定した関数の引数の数とちょうど同じだけ 実引数もしくはプレースホルダを指定しなければならない。
int sub(int a, int b){ return a-b; }
int main()
{
function<int(int)> f=bind(&sub, 10, _2); // 1引数目を10に固定
cout<<f(20)<<endl; // -10
function<int(int)> g=bind(&sub, _1, 10); // 2引数目を10に固定
cout<<g(20)<<endl; // 10
function<int(int, int)> h=bind(&sub, _2, _1); // 引数の順番を入れ替え
cout<<h(10, 20)<<endl; // 10
function<int(int)> i=bind(&sub, _1, _1); // 両方に第一引数を渡す
cout<<i(10)<<endl; // 0
}