bind
auto g = bind(f, arg_list)
用我自己的話來說,就是把原來函數(shù)f的參數(shù)重新安排,可以直接綁定值,也可以使用占位符placeholder,達(dá)到減少參數(shù)或者調(diào)換參數(shù)順序的作用。
例如
#include <iostream>
#include <string>
#include <functional>
using namespace std;
using namespace std::placeholders; // for _1, _2 ...
string f(string a1, string a2, string a3, string a4)
{
return a1+a2+a3+a4;
}
int main(int argc, char *argv[])
{
auto g = bind(f,_1,"Two","Three","Four");
cout << g("One") << endl;
return 0;
}
輸出
OneTwoThreeFour
這樣就把一個(gè)四個(gè)參數(shù)的函數(shù)f(4)轉(zhuǎn)成了一個(gè)參數(shù)的函數(shù)g(1),其中的占位符_1表示g的第一個(gè)參數(shù)。
如果交換參數(shù)的順序,也是使用占位符,比如上例
int main(int argc, char *argv[])
{
auto g = bind(f,_4,_2,_3,_1);
cout << g("One","Two","Three","Four") << endl;
return 0;
}
輸出
FourTwoThreeOne
所以占位符就是表示g中的第幾個(gè)參數(shù),再按順序傳給f。
可以用于調(diào)整參數(shù)順序,綁定部分參數(shù)等,做一個(gè)函數(shù)適配器的功能。