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;
}

相关