C++ bind

  • 定义

    是用来绑定函数调用的某些参数,可以将bind函数看作一个通用的函数适配器,它接受一个可调用对象,生成新的可调用对象来适应原对象的参数列表。
    调用bind的一般形式:auto newCallable = bind(callable,arg_list);
    其中,newCallable本身是一个可调用对象,arg_list是一个逗号分隔的参数列表,对应给定的callable的参数。即,当我们调用newCallable时,newCallable会调用callable,并传给它arg_list中的参数。

    arg_list中的参数可能包含形如_n的名字,其中n是一个整数,这些参数是“占位符”,表示newCallable的参数,它们占据了传递给newCallable的参数的“位置”。数值n表示生成的可调用对象中参数的位置:_1为newCallable的第一个参数,_2为第二个参数,以此类推

  • 用法

    • 1、绑定普通函数

      #include<iostream>
      #include<functional>
      using namespace std;
      
      int plus(int a,int b)
      {
         return a+b;
      }
      int main()
      {
        表示绑定函数plus 参数分别由调用 func1 的第一,二个参数指定
        _1和_2表示func1(1,2)的第一个参数1和第二个参数2
         function<int(int,int)> func1 = std::bind(plus, placeholders::_1, placeholders::_2);
         cout<<func1(1,2)<<endl; //3
         
        func2的类型为 function<void(int, int, int)> 与func1类型一样
         auto  func2 = std::bind(plus,1,2);   表示绑定函数 plus 的第一,二为: 12 
         cout<<func2()<<endl; //3
         retunrn 0;
      }
      
    • 2、绑定类的成员函数

    1. bind绑定类成员函数时,第一个参数表示对象成员函数的指针,第二个参数表示对象的地址。
    2. 必须显示的指定&Plus::plus,因为编译器不会将对象的成员函数隐式转换成函数指针,所以必须在Plus::plus前面添加&。
    3. 使用对象成员函数的指针时,必须知道该指针属于哪个对象,因此第二个参数为对象的地址&plus。
      #include<iostream>
      #include<functional>
      using namespace std;
      class Plus
      {
         public:
         	int plus(int a,int b)
         	{
         	    return a+b;
         	}
      }
      int main()
      {
         Plus p;
         指针形式调用成员函数
         function<int(int,int)> func1 = std::bind(&Plus::plus,&p, placeholders::_1, placeholders::_2);
         对象形式调用成员函数
         function<int(int,int)> func2 = std::bind(&Plus::plus,p, placeholders::_1, placeholders::_2);
         cout<<func1(1,2)<<endl; //3
         cout<<func2(1,2)<<endl; //3
         retunrn 0;
      }
      
    • 3、绑定类静态成员函数

      #include<iostream>
      #include<functional>
      using namespace std;
      class Plus
      {
      	public:
      		static int plus(int a,int b)
      		{
      		    return a+b;
      		}
      }
      int main()
      {
         function<int<int,int>> func1 = std::bind(&Plus::plus, placeholders::_1, placeholders::_2);
         cout<<func1(1,2)<<endl; //3
         retunrn 0;
      }
      
  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值