boost::function/bind

boost::function

头文件:<boost/function.hpp>

boost::function是一个函数模板,可以代替具有相同返回类型,相同参数和相同参数个数的不同函数,和函数指针有些类似,用于封装函数,定义之后可以多次调用

// 简单的例子
typedef boost::function<int(int ,int)> function_type;int Max(int a, int b) {return a > b ? a : b;
}int main() {function_type p = &Max;int ans = p(1, 2);cout << ans << endl;    // 输出2return 0;
}

boost::bind

头文件:<boost/bind.hpp>

boost::bind和boost::function结合,可以做到函数指针做不到的绑定,可以指向任何函数,包括成员函数

bind接受的第一个参数是一个可调用的对象,包括函数,函数指针,函数对象,成员函数指针,之后bind最多接受9个参数,参数量要和绑定的函数参数数量相同,bind绑定之后返回一个函数对象,内部保存了函数拷贝,具有operator(),返回类型自动为绑定的返回类型。在发生调用的时候,函数对象把之前存储的参数转发给函数完成调用

#include <iostream>
#include <boost/bind.hpp>
#include <boost/function.hpp>
using namespace std;int Max(int a, int b) {return a > b ? a : b;
}int main() {boost::function<int()> f;f = boost::bind(&Max, 1, 2);cout << f() << endl;       // 输出2boost::function<int(int, int)> f1;f1 = boost::bind(&Max, _1, _2);cout << f1(1, 2) << endl; // 输出2//int ret = boost::bind(&Max, _1, _2)(1, 2);//cout << ret << endl;       // 输出2return 0;
}
#include <iostream>
#include <boost/bind.hpp>
#include <boost/function.hpp>
using namespace std;class A {public:void fun1() {cout << "hello A" << endl;}void fun2(int a, int b, int c) {cout << a << " " << b << " " << c << endl;}
};int main() {A a;boost::function<void()> f;f = boost::bind(&A::fun1, &a);f();       // 输出 hello Af = boost::bind(&A::fun2, &a, 1, 2, 3);f();       // 输出 1 2 3boost::function<void(int, int)> f1;f1 = boost::bind(&A::fun2, &a, _1, 2, _2);f1(1, 3);    // 输出1 2 3return 0;
}

boost::function/bind相关推荐

  1. 函数指针amp;绑定: boost::functoin/std::function/bind

    see link: https://isocpp.org/wiki/faq/pointers-to-members function vs template: http://stackoverflow ...

  2. boost::function模块boost::lambda::bind用法的测试程序

    boost::function模块boost::lambda::bind用法的测试程序 实现功能 C++实现代码 实现功能 boost::function模块boost::lambda::bind用法 ...

  3. Boost:bind绑定的function<>测试程序

    Boost:bind绑定的function<>测试程序 实现功能 C++实现代码 实现功能 bind绑定的function<>测试程序 C++实现代码 #include < ...

  4. 【Boost】以boost::function和boost:bind取代虚函数

    这是一篇比较情绪化的blog,中心思想是"继承就像一条贼船,上去就下不来了",而借助boost::function和boost::bind,大多数情况下,你都不用上贼船. boos ...

  5. boost::function和boost:bind取代虚函数

    这是一篇比较情绪化的blog,中心思想是"继承就像一条贼船,上去就下不来了",而借助boost::function和boost::bind,大多数情况下,你都不用上贼船. boos ...

  6. boost库 bind/function的使用

    Boost::Function 是对函数指针的对象化封装,在概念上与广义上的回调函数类似.相对于函数指针,function除了使用自由函数,还可以使用函数对象,甚至是类的成员函数,这个就很强大了哈 # ...

  7. [转] boost::function用法详解

    http://blog.csdn.net/benny5609/article/details/2324474 要开始使用 Boost.Function, 就要包含头文件 "boost/fun ...

  8. boost::phoenix模块使用 BLL 和 boost::function 进行测试

    boost::phoenix模块使用 BLL 和 boost::function 进行测试 实现功能 C++实现代码 实现功能 boost::phoenix模块使用 BLL 和 boost::func ...

  9. Boost:bind绑定和数据成员以及高级用途的测试程序

    Boost:bind绑定和数据成员以及高级用途的测试程序 实现功能 C++实现代码 实现功能 bind绑定和数据成员以及高级用途的测试程序 C++实现代码 #include <boost/con ...

最新文章

  1. 2018年8月以太坊DApp数据分析报告
  2. 50本程序员圣经级别书籍!包邮送到家!一书在手,天下我有!
  3. 圣朱妮佩洛|San Junipero(2)
  4. 查看go 安装了哪些包_如何灵活地进行 Go 版本管理
  5. scikit-learn学习笔记(三)Generalized Linear Models ( 广义线性模型 )
  6. aws v2.2.exe_如何使用Python 3.6在AWS EC2上创建运行uWSGI,NGINX和PostgreSQLDjango服务器...
  7. python实现Redis订阅发布
  8. 找一个程序员当男朋友是什么样的体验?
  9. sql 从一张表修改另一张表
  10. 修改分值,总分不能超过100
  11. 【图像增强】基于matlab直方图均衡化图像增强【含Matlab源码 960期】
  12. 理论+实验:Apache网页与安全优化(网页压缩、网页缓存、隐藏版本信息、网页图片防盗链)
  13. vue 微信支付的坑_微信支付踩坑
  14. 关于打开github网站慢如何解决
  15. oracle omf管理,使用OMF管理表空间
  16. python实现批量变更阿里云DNS解析记录状态
  17. VB获得迅雷资讯弹出网页的源代码
  18. 服务器系统通用串行总线控制器,win7进入设备管理器发现无法启动通用串行总线控制器如何解决...
  19. s5pv210_gpio驱动及其在android2.3.1下jni调用
  20. canvas 模拟地球绕太阳转动 月球绕地球转动

热门文章

  1. Java的Object类
  2. 前台如何解析json格式 以及后台如何生成json格式
  3. 360不用卸,照样上你QQ
  4. 5个php实例,细致说明传值与传引用的区别
  5. kali安装tools
  6. word2vec中文相似词计算和聚类的使用说明及c语言源码
  7. RxSwift之深入解析Subject的使用和实现原理
  8. 【数据结构与算法】之深入解析运用链表结构计算“两数相加”的算法实现
  9. OpenGL ES之着色语言GLSL的使用说明及API
  10. setdefaultencoding函数使用详解