C++11之前使用的binder1st、binder2nd、bind1st、bind2nd,在C++11中将合并为bind(),使用时需要引用#include<functional>,bind()可以绑定函数(function)、函数对象(function object)、成员函数(member function)、成员对象(member object),其中在绑定成员函数和成员对象时,必须是对象的地址。bind()函数的好处是,在一些需要后期使用时才输入参数的函数很有帮助。
#include<functional>
using namespace std:placeholder;//引进占位符
double my_Divide(double x,double y) { return x/y; } //function
typedef struct my_Pair //member funtion
{
double a,b;
double multiply() { return a*b; }
};
//绑定函数(binding function)
auto fn_five1=bind(my_Divide,10,2);
std::cout<<fn_five<<endl; //5
auto fn_five2=bind(my_Divide,_1,2);
std::cout<<fn_five2(10)<<endl; // 5
auto fn_five3=bind(my_Divide,_1,_2);
std::cout<<fn_five3(2,10); // 0.2
auto fn_five4=bind(my_Divide,_2,_1);
std::cout<<fn_five4(10,2)<<endl; //0.2注意是: 2/10
auto fn_five5=bind<int>(my_Divide,10,3);
std::cout<<fn_five5<<endl;//3
//绑定成员函数(member function)
my_Pair ten_two {10,2};
auto mul1=bind(&my_Pair::multiply,_1);
std::cout<<mul1(ten_two)<<endl; //20
auto mul2=bind(&my_Pair::a,ten_two);
std::cout<<mul2<<endl; //10
auto mul3=bind(&my_Pair::b,_1);
std::cout<<mul3(ten_two)<<endl;//2