美文网首页程序员
bind()函数理解(C++11)

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

作者: VAYY | 来源:发表于2017-03-19 11:21 被阅读0次

    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

    相关文章

      网友评论

        本文标题:bind()函数理解(C++11)

        本文链接:https://www.haomeiwen.com/subject/cmdmnttx.html