boost::function/bind
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相关推荐
- 函数指针amp;绑定: boost::functoin/std::function/bind
see link: https://isocpp.org/wiki/faq/pointers-to-members function vs template: http://stackoverflow ...
- boost::function模块boost::lambda::bind用法的测试程序
boost::function模块boost::lambda::bind用法的测试程序 实现功能 C++实现代码 实现功能 boost::function模块boost::lambda::bind用法 ...
- Boost:bind绑定的function<>测试程序
Boost:bind绑定的function<>测试程序 实现功能 C++实现代码 实现功能 bind绑定的function<>测试程序 C++实现代码 #include < ...
- 【Boost】以boost::function和boost:bind取代虚函数
这是一篇比较情绪化的blog,中心思想是"继承就像一条贼船,上去就下不来了",而借助boost::function和boost::bind,大多数情况下,你都不用上贼船. boos ...
- boost::function和boost:bind取代虚函数
这是一篇比较情绪化的blog,中心思想是"继承就像一条贼船,上去就下不来了",而借助boost::function和boost::bind,大多数情况下,你都不用上贼船. boos ...
- boost库 bind/function的使用
Boost::Function 是对函数指针的对象化封装,在概念上与广义上的回调函数类似.相对于函数指针,function除了使用自由函数,还可以使用函数对象,甚至是类的成员函数,这个就很强大了哈 # ...
- [转] boost::function用法详解
http://blog.csdn.net/benny5609/article/details/2324474 要开始使用 Boost.Function, 就要包含头文件 "boost/fun ...
- boost::phoenix模块使用 BLL 和 boost::function 进行测试
boost::phoenix模块使用 BLL 和 boost::function 进行测试 实现功能 C++实现代码 实现功能 boost::phoenix模块使用 BLL 和 boost::func ...
- Boost:bind绑定和数据成员以及高级用途的测试程序
Boost:bind绑定和数据成员以及高级用途的测试程序 实现功能 C++实现代码 实现功能 bind绑定和数据成员以及高级用途的测试程序 C++实现代码 #include <boost/con ...
最新文章
- 2018年8月以太坊DApp数据分析报告
- 50本程序员圣经级别书籍!包邮送到家!一书在手,天下我有!
- 圣朱妮佩洛|San Junipero(2)
- 查看go 安装了哪些包_如何灵活地进行 Go 版本管理
- scikit-learn学习笔记(三)Generalized Linear Models ( 广义线性模型 )
- aws v2.2.exe_如何使用Python 3.6在AWS EC2上创建运行uWSGI,NGINX和PostgreSQLDjango服务器...
- python实现Redis订阅发布
- 找一个程序员当男朋友是什么样的体验?
- sql 从一张表修改另一张表
- 修改分值,总分不能超过100
- 【图像增强】基于matlab直方图均衡化图像增强【含Matlab源码 960期】
- 理论+实验:Apache网页与安全优化(网页压缩、网页缓存、隐藏版本信息、网页图片防盗链)
- vue 微信支付的坑_微信支付踩坑
- 关于打开github网站慢如何解决
- oracle omf管理,使用OMF管理表空间
- python实现批量变更阿里云DNS解析记录状态
- VB获得迅雷资讯弹出网页的源代码
- 服务器系统通用串行总线控制器,win7进入设备管理器发现无法启动通用串行总线控制器如何解决...
- s5pv210_gpio驱动及其在android2.3.1下jni调用
- canvas 模拟地球绕太阳转动 月球绕地球转动