C++ bind函数
bind()
是一个函数适配器,返回一个可调用对象,他可以将一个函数的参数列表做魔改。
设置默认参数
using namespace std::placeholders;
void f(int a, int b)
{
cout << a << ' ' << b;
}
int main()
{
int a = 0;
auto new_f = bind(f, _1, 3);
new_f(1);//结果输出1 3
return 0;
}
其中的_1
是一个参数占位符,_n
就代表占住函数new_f()
的第n
个参数。_n
定义在std::placeholders
命名空间内,通过using
声明来使用。
调整参数顺序
using namespace std::placeholders;
void ff(int a, int b)
{
cout << a << ' ' << b;
}
int main()
{
int a = 0;
auto f = bind(ff, _2, _1);
f(1, 3);//结果输出3 1
return 0;
}
绑定引用参数
默认情况,bind那些不是占位符的参数被拷贝到bind返回的可调用对象中。如果希望传递引用,可用ref()
函数传递。
using namespace std::placeholders;
void f(int& a)
{
++a;
}
int main()
{
int a = 0;
auto new_f = bind(f, ref(a));
new_f();
cout << a; //结果为1
return 0;
}