bind()函数理解(C++11)

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容