envoltorio de unión
La forma general de llamar a bind:
auto newCallable = bind(callable,arg_list);
Entre ellos, newCallable en sí es un objeto invocable y arg_list es una lista de parámetros separados por comas correspondientes a los parámetros del invocable dado.
Cuando llamamos a newCallable, newCallable llamará a invocable y le pasará los parámetros en arg_list.
Uso de enlace
#include<iostream>
#include<functional>
using namespace std;
int Add(int a, int b)
{
cout << a << " " << b << endl;
return a + b;
}
class Sub
{
public:
int sub(int a, int b)
{
cout << a << " " << b << endl;
return a - b;
}
double mul(int a, int b, double rate)
{
return a * b * rate;
}
static int test(int a, int b)
{
return a + b;
}
};
int main(void)
{
function<int(int, int)>func1 = bind(Add, placeholders::_1, placeholders::_2);
function<int(int, int)>func2 = bind(Add, placeholders::_2, placeholders::_1);
func1(1, 2);
func1(2, 1);
function<int(int, int)>func3 = bind(&Sub::sub,Sub(), placeholders::_1, placeholders::_2);
function<int(int, int)>func4 = bind(&Sub::sub,Sub(), placeholders::_2, placeholders::_1);
func3(5, 6);
func4(5, 6);
function<int(int, int)>func5 = bind(&Sub::mul, Sub(), placeholders::_1, placeholders::_2, 1.5);
function<double(int, int)>func6 = bind(&Sub::mul, Sub(), placeholders::_1, placeholders::_2, 1.5);
cout << func6(3,3)<<endl;
function<int(int, int)>func7 = bind(&Sub::test, placeholders::_1, placeholders::_2);
cout << func7(10, 20)<<endl;
return 0;
}