bind和fucntion使用
bind函数可以看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表
即通过bind可以调整函数的参数数量,将这个函数可以作为函数指针传入。
bind调用的一般形式 auto newCallable = bind(callable,arg_list)
以下代码进行了三种不同形式的调用
1. auto a = bind(sum, std::placeholders::_1, std::placeholders::_2);
a(1,2);
使用了2个占位符,正常调用,a值为1,b值为2,s值为3
2. auto b = bind(sum, std::placeholders::_1, 10);
//b(1, 2); //11
b(1);
使用了1个占位符,则形参2(即b) 值被设置为10,即使传入的值为2,b的值仍会设置成10
3.占位符的位置与placeholders的数字有关,而与顺序无关。所以100设置的是a的值,b被设置为2
auto c = bind(sum, std::placeholders::_2, 100);
c(1, 2);//102
#include <iostream>
#include <functional>
using namespace std;
int sum(int a, int b)
{
int s = a + b;
cout << "value a: " << a << endl;
cout << "value b: " << b << endl;
cout << "value s: " << s << endl;
return s;
}
int main()
{
auto a = bind(sum, std::placeholders::_1, std::placeholders::_2);
a(1,2);
auto b = bind(sum, std::placeholders::_1, 10);
//b(1, 2); //11
b(1);
auto c = bind(sum, std::placeholders::_2, 100);
c(1, 2);//102
}
参考https://www.jianshu.com/p/f191e88dcc80