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 的第一,二个参数指定function<int(int,int)> func1 = std::bind(plus, placeholders::_1, placeholders::_2);//func2的类型为 function<void(int, int, int)> 与func1类型一样auto  func2 = std::bind(plus,1,2);   //表示绑定函数 plus 的第一,二为: 1, 2 cout<<func1(1,2)<<endl; //3cout<<func2()<<endl; //3retunrn 0;
}

2. 绑定类的成员函数

#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; //3cout<<func2(1,2)<<endl; //3retunrn 0;
}

占位符_1位于placeholders的命名空间,而placeholders位于std的命名空间中

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; //3retunrn 0;
}

参考:primer C++ 第五版

C++11 bind函数相关推荐

  1. C++11 lambda表达式、function类模板、bind函数适配器

    文章目录 lambda表达式 lambda表达式的语法 lambda表达式的原理 function模板 function与重载函数 bind函数适配器 lambda表达式 当我们在写代码的时候如果经常 ...

  2. C++11 参数绑定-bind函数用法

    lambda表达式:https://blog.csdn.net/readyone/article/details/110874546 https://blog.csdn.net/readyone/ar ...

  3. bind函数怎么用JAVA_c++bind函数的用法

    bind函数: auto newCallable = bind(callable, arg_list); callable依据手册可以是: Callable object (function obje ...

  4. 泛型算法(lambda表达式、function类模板、bind函数适配器、迭代器类别、链表数据结构独有的算法)

    文章目录 概念 find()函数 迭代器令算法不依赖于容器 但算法依赖于元素类型的操作 算法永远不会执行容器的操作 只读算法 accumulate()函数 从两个序列中读取元素(equal函数为例) ...

  5. 函数对象,lamdda表达式,function函数包装,std::bind函数绑定

    一 函数对象 在学习其他知识之前,先来学习函数对象,然后引出std::lambda.std::function.std::bind等内容的学习,那么究竟什么是函数对象呢? 函数对象(Function ...

  6. C/C++ bind函数应用详解

    文章目录 知识前导 头文件 bind介绍 bind函数: bind简述: placeholders 用法探究 单个参数 多个参数 成员函数 知识前导 头文件 #include <function ...

  7. C语言网络编程:bind函数详解

    文章目录 函数功能 函数头文件 函数使用 函数参数 函数举例 为什么需要bind函数 服务器如何知道客户端的ip和端口号 htons函数 `htons`兄弟函数`htonl`,`ntohs`,`nto ...

  8. bind函数作用、应用场景以及模拟实现

    bind函数 bind 函数挂在 Function 的原型上 Function.prototype.bind 创建的函数都可以直接调用 bind,使用: function func(){console ...

  9. 函数式编程之-bind函数

    Bind函数 Bind函数在函数式编程中是如此重要,以至于函数式编程语言会为bind函数设计语法糖.另一个角度Bind函数非常难以理解,几乎很少有人能通过简单的描述说明白bind函数的由来及原理. 这 ...

最新文章

  1. Waiting for Debugger
  2. html excel零不显,Excel数值为0不显示的三种解决方法
  3. Image Semantic Segmentation之DeepLab两个坑
  4. 【亲测有效】andriod studio性能优化
  5. css 写打印样式问题
  6. Python编程基础20:实例成员与类成员
  7. 个人生活助手app_“3·15可信赖应用白名单”发布 360旗下多款APP获评甲级认证
  8. mysql 主主_MySQL双主(主主)架构
  9. java 线程的执行原理
  10. 网页实现二维码扫描和解析
  11. 常用的分析方法及模型
  12. 笔记本电脑摄像头黑屏怎么处理?
  13. 2018安徽省考c语言笔试答案,2018年安徽公务员考试行测真题解读
  14. Mac OSX配置XAMP虚拟主机
  15. LeetCode笔记:Biweekly Contest 37 比赛记录
  16. Winform(XtraReport)实现打印方法(转载)
  17. 无法识别服务器硬件信息,请教:无法获取服务器硬件信息
  18. 杰力科创七彩灯雾化器芯片--DLT8P60SC
  19. UnsupportedOperationException:setProperty must be overridden by all subclasses of SOAPMessage解决方法有效
  20. 抱怨一下项立刚先生和他的飞象网的博客

热门文章

  1. SMB 0x80004005 0x800704b3 异常处理
  2. paypal 主要的html 表格变量的含义
  3. 优必选将推出家庭守卫机器人——“第一军团风暴兵”机器人
  4. 分支类1 7-3 根据输入的空气污染指数,输出相应的信息。 (5 分)
  5. Linux:如何调整ubuntu的系统界面使其放大
  6. 计算两组2D bbox的IOU
  7. Qt中model/view设计模式
  8. Mybatis从入门到精通二(入门详解)
  9. python爬取页面内容由京东提_python制作爬虫爬取京东商品评论教程
  10. 优化游戏以便在 Facebook.com 上运行