bind函數看做是一個通用的函數適配器,它接受一個可調用對象,生成一個新的可調用對象來「適應」原對象的參數列表。
void fun(int x,int y,int z) { cout<<x<<" "<<y<<" "<<z<<endl; }
void fun_2(int &a,int &b) { a++; b++; cout<<a<<" "<<b<<endl; } 1、綁定函數fun的第一,二,三個參數值爲: 1 2 3 auto f1 = std::bind(fun,1,2,3); f1();//print:1 2 3 2、綁定函數 fun 的第三個參數爲3,而fun的第一,二個參數由調用f2指定 auto f2 = std::bind(fun, placeholders::_1, placeholders::_2, 3); f2(1,2);//print:1 2 3 3、綁定函數 fun 的第三個參數爲 3,而fun 的第一,二個參數分別由調用 f3 的第二,一個參數指定 auto f3 = std::bind(fun,placeholders::_2,placeholders::_1,3); f3(1,2);//print:2 1 3 4、綁定fun_2的第一個參數爲n, fun_2的第二個參數由調用f4的第一個參數(_1)指定。 int n = 2; int m = 3; auto f4 = std::bind(fun_2, n,placeholders::_1); //bind(fun_2, 2, 3) f4(m); //print:3 4
std::bind(fun_2, std::placeholders::_1, std::placeholders::_2)(1, 2); //輸出 1 2
std::bind(fun_2, std::placeholders::_2, std::placeholders::_1)(1, 2); //輸出 2 1
5、綁定類的成員函數 A a; auto f5 = std::bind(&A::fun_3, a,placeholders::_1,placeholders::_2); std::function<void(int,int)> fc = std::bind(&A::fun_3, a,std::placeholders::_1,std::placeholders::_2);
f5(10,20);//調用a.fun_3(10,20),print:10 20