Boost::Bind 基础
2019独角兽企业重金招聘Python工程师标准>>>
先了解一下:函数对象
重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。[1]
一个类对象,表现出一个函数的特征,就是通过“对象名+(参数列表)”的方式使用一个
类对象,如果没有上下文,完全可以把它看作一个函数对待。这是通过重载类的
operator()来实现的。比如,对于调用
int s = sum(1, 1);
你可能把它看作一个函数调用:
int sum(int i, int j) { return i+j; }
但很可能它是一个函数对象:
class Sum {
public:
int operator()(int i, int j) { return i+j; }
};
Sum sum;
而大多数情况是
template <class T>
class Sum {
public:
T operator()(T i, T j) { return i+j; }
};
Sum <int> sum;
“在标准库中,函数对象被广泛地使用以获得弹性”,标准库中的很多算法都可以
使用函数对象或者函数来作为自定的回调行为;
当我们使用函数时习惯于C函数的格式,即如下形式
resulttype funname( arglist );
返回值类型 函数名( 参数列表 );
在Boost.Function中,我们可以方便的定义定义函数对象。不过在定义用来表示类成员函数的函数对象时
第一个参数是类指针。而且在调用时,要传入一个类实例的指针。这样用起来并不是很方便,因为调用者
要知道类实例。这实际上没有实现解耦。而解耦是我们使用回调或委托设计的一个目标。
为了解决这个问题,我们要使用Boost.Bind库
Boost.Bind是一个函数对象工厂。他用来产生我们需要的函数对象。好了,有了它,你可以在你设计中大
量使用Boost.Function。不用再去定义类成员函数形式的函数对象啦,只用定义普通函数对象。
一个简单的例子
class CExample
{
public:
bool printstr( const std::string &str )
{
std::cout << "CExample::printstr" << str << std::endl;
return true;
}
};
//定义一个函数对象
boost::function< bool ( const std::string& ) > printstr;
//用Boost.Bind创建一个函数对象,赋给printstr
CExample example;
printstr = boost::bind( &CExample::printstr, &example, _1 );
好了,我们创建了一个函数对象,而且调用时不再需要类实例拉。用Boost.Function和Boost.Bind大大
的简化了Command模式的实现。
在上面的例子中要个古怪的对象"_1"。这个叫做站位符,他代表这个位置有个参数,但现在还不知道参
数是什么。_1代表参数列表中的第一个位置上的参数。Boost.Bind一共定义了9个站位符对象。如下
_1,_2,_3,_4,_5,_6,_7,_8,_9。分别代表参数列表中位子。
Boost.Bind产生的函数对象可以直接使用,利用上面的例子。
bool b = boost::bind( &CExample::printstr, &example, _1 )( "Hello World" );
转载于:https://my.oschina.net/lcxidian/blog/381658
Boost::Bind 基础相关推荐
- Boost.Bind的基础使用
当我们使用函数时习惯于C函数的格式,即如下形式 resulttype funname( arglist ); 返回值类型 函数名( 参数列表 ); 在Boost.Function中,我们可以方便的定义 ...
- boost.asio基础篇 小白入门注解
参考资料:https://blog.csdn.net/caoshangpa/article/details/79231740 一个基础的同步客户端 //使用asio的所有程序都需要至少有一个io_co ...
- c++ Boost库之boost::bind学习
刚开始学c++,就看boost库其实有点小小的不情愿. 团队要求必掌握的Boost库: boost::bind boost::function boost::Signals2 学习前奏:在写关于coc ...
- boost::bind 介绍
boost::bind 介绍 这篇文章介绍boost::bind()的用法, 文章的主要内容是参考boost的文档. 1. 目的 boost::bind 是std::bindlist 和 std::b ...
- boost bind使用指南
bind - boost 头文件: boost/bind.hpp bind 是一组重载的函数模板. 用来向一个函数(或函数对象)绑定某些参数. bind的返回值是一个函数对象. 它的源文件太长了. 看 ...
- 展示使用 boost bind 和 phoenix 处理删除的不同方法的测试程序
展示使用 boost bind 和 phoenix 处理删除的不同方法的测试程序 实现功能 C++实现代码 实现功能 展示使用 boost bind 和 phoenix 处理删除的不同方法的测试程序 ...
- Boost:boost :: bind相等运算符的测试程序
Boost:boost :: bind相等运算符的测试程序 实现功能 C++实现代码 实现功能 boost :: bind相等运算符的测试程序 C++实现代码 #include <boost/c ...
- boost::bind时候注意性能问题
原文地址:http://hi.baidu.com/hpagent/blog/item/471b7d92dc8ac39ca977a4dc.html 测试一下,看看例子 #include <iost ...
- 【Boost】以boost::function和boost:bind取代虚函数
这是一篇比较情绪化的blog,中心思想是"继承就像一条贼船,上去就下不来了",而借助boost::function和boost::bind,大多数情况下,你都不用上贼船. boos ...
最新文章
- 物联网推动时代进步 中小玩家如何傍上运营商这棵大树
- Delphi中高级DLL的编写和调用
- spring 框架-java配置163邮件服务器,发送邮件
- crontab 提示 command not found 解决方案
- 【系统架构设计师】软考高级职称,一次通过,2017年下半年系统架构设计师考试论文真题(论软件架构风格)
- Qt 小技术总结-持续更新
- apache tomcat linux 配置,linux下apache+tomcat配置
- 大数据算法_大数据算法下的我们,犹如“皇帝的新衣”
- win10字体安装_Win10操作系统下字体的安装教程(非常详细,适合新手DIY)
- 基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)
- 泰迪杯数据挖掘挑战赛—数据预处理(二)
- android是什么意思
- Win32 API 列表5 (格式有点乱)
- office安装双击setup后点击‘立即安装’无反应(闪退)
- 字节跳动技术面都过了,结果还是被刷了,问HR原因竟是。。。
- 模仿猫眼电影App一个动画效果
- 交换机和路由器技术-13-三层交换
- 土壤水分传感器的工作原理和应用环境
- 分布式事务系列02--分布式事务定义,理论基础--CAP,BASE,酸碱平衡
- 数码相框方案_索尼NEX5评测:具有视频功能的数码单反相机
热门文章
- 如何linux网页修改回80端口,linux下如何修改iptables开启80端口
- 【转载】美国煤层气发展史
- vbScript中WScript.Shell对象的 run 和 exec
- Windows网络命令行程序
- 考研(一):一段不错的经历之考研总结
- 用英伟达Jetson Nano运行PyTorch Fast.ai丨手把手教程+第三方工具
- 全球高校CS实力最新排行:清华AI界第二,中科院视觉领域最强
- 扎克伯格5小时听证鏖战:五大焦点,四处尴尬,一次耿直CEO笑翻全场
- Arm推出全新Mali多媒体套件,想让机器学习进入中低端智能手机
- AlphaZero完胜三大世界冠军棋类程序:5000个TPU、自学一天