【Boost】boost库中function和bind一起使用的技巧(一)
1 bind/function 引
(1)头文件
bind函数#include <boost/bind.hpp>
function使用头文件#include <boost/function.hpp>
如果写程序时出错则在function及bind前面加上限定:"boost::"
(2)功能
bind绑定一个函数及其参数.
function是类和模板的组合,它定义的对象可以指向一个函数(包装一个函数 ),类似一个函数指针。既可以直接指向一个函数也可以接收bind的返回值。
(3)返回值
bind返回一个函数对象。
function本身是一种类模板,可被看作声明的关键字。
2 用法
一般用法:bind用于一般普通函数( 以非类、结构的成员函数 )具有多种形式,但用法简单。
一般用法:function用于一般函数的情况下,只需要按照一般函数的 “返回值”,“参数列表( 参数列表用括号括起来,彼此用逗号隔开 )”来声明对象,然后指向对应的函数地址(函数名)
在针对类成员函数的时候,function对象可以不再有类和对象的地址。因为bind已经将二者包装了。
2.1 bind
(1)bind 单用
bind( print, 3, _1)(4);//使用占位符给调用函数传参占个位置:传入4
bind(print, * ,* );*表示参数,返回的是print函数,加在行尾加"()"表示调用print函数。
(2)bind应用于成员函数
bind在用于成员函数时,除了函数地址的重要性之外,还要知道具体是哪一个对象在调用类中的成员函数。如果是在类中的成员函数中调用另外一个成员函数这个对象可以被声明为this。
cout << i<< "\t" << j << "\n";
boost::bind(&Myfun::print,f, 3, 4)();
要用bind绑定类类中的成员函数时,第一个参数表示成员函数的所在类的地址,第二个参数表示具体调用此成员函数的对象。后面的参数跟bind用于一般函数的用法一致。
2.2 function
(1)function应用于一般的函数
针对于一般设计的函数( 非类和结构体中的成员函数 )来说,function指向一个函数的使用形式为:
若函数定义的形式为:type fun_name( type1 i, type2 j){…}
则使用function指向此函数:function<type(type1 i, type2 j)> tf;
function模板内"<>"所要使用的类型要和函数的一致:type表示所指函数的返回值类型,type1,type2是所指函数参数的类型。
cout << i << "\t" << j <<"\n";
boost::function<void(inti, int j)> tf;
(2)function应用于成员函数
cout << i<< "\t" << j << "\n";
boost::function<void(Myfun*,int i, int j)> tf;
function应用直接应用于类的成员函数时,声明时要声明对应成员函数类的指针对象,在调用时再将定义的类对象的地址传入。
2.3bind & function联用
(1)普通函数(非成员函数)
(2)用于成员函数
cout << i<< "\t" << j << "\n";
boost::function<void(int i, int j)> tf;
tf = boost::bind(&Myfun::print, f, 3, 4);
【Boost】boost库中function和bind一起使用的技巧(一)相关推荐
- 【Boost】boost库中function和bind一起使用的技巧(二)
与 Boost.Function 一起使用 Boost.Bind 当我们把 Boost.Function 与某个支持参数绑定的库结合起来使用时,事情变得更为有趣.Boost.Bind 为普通函数.成员 ...
- 【Boost】boost库中function的用法
要开始使用 Boost.Function, 就要包含头文件 "boost/function.hpp", 或者某个带数字的版本,从"boost/function/funct ...
- Boost C++ 库
http://zh.highscore.de/cpp/boost/frontpage.html Boost C++ 库 目录 第 1 章 简介 第 2 章 智能指针 第 3 章 函数对象 第 4 章 ...
- 使用 Boost.Lambda 库创建并存储在 Boost.Function 对象中的函子中使用 Boost.Units 的数量、单位和绝对类型
使用 Boost.Lambda 库创建并存储在 Boost.Function 对象中的函子中使用 Boost.Units 的数量.单位和绝对类型 实现功能 C++实现代码 实现功能 使用 Boost. ...
- 【Boost】boost库中thread多线程详解1——thread入门与简介
1. 概述 线程就是,在同一程序同一时间内允许执行不同函数的离散处理队列. 这使得一个长时间去进行某种特殊运算的函数在执行时不阻碍其他的函数变得十分重要. 线程实际上允许同时执行两种函数,而这两个函数 ...
- 【Boost】boost库中timer定时器
同步Timer asio中提供的timer名为deadline_timer,它提供了超时计时的功能.首先以一个最简单的同步Timer为例来演示如何使用它. #include <iostream& ...
- Boost库之function的使用
http://www.cnblogs.com/hujian/archive/2009/06/04/1495813.html Boost库的function是一组函数对象包装类的模板,实现了一个泛型的回 ...
- CLion 使用 clang-cl 工具链时未正确链接 vcpkg 中的 Boost 外部库
TL;DR: 简单来说是 CLion 的问题; 解决方法就是避免使用 clang-cl 工具链. 2023/02/24 更新: 最新的 CLion EAP 似乎已经修正了这个问题. 昨天比较闲, 就给 ...
- boost库中优秀的网络库asio
文章目录 一.须知 二.ASIO 三.我们将从研究同步操作开始 四.当使用异步操作时,会发生不同的事件序列 五.Proactor模型 六.常用内容 七.C++ 建立本地网络服务器 (Boost.Asi ...
最新文章
- 动软代码生成V2.74模版简介
- 基于Android SQLite的升级详解
- 【机器学习基础】XGBoost、LightGBM与CatBoost算法对比与调参
- 前端月趋势榜:7 月最新上榜的、热门的 10 个前端开源项目 - 2107
- 【C语言简单说】十:小结
- nssl1167-桐人的约会【最短路】
- ROC和AUC介绍以及如何计算AUC
- STM32F407+CubeMX-使用TIM计算编码器的脉冲总数,并计算脉冲方向
- 从阅读空间到QQ阅读,一个web2.0向web1.0的倒退的产品
- C#设计模式之二十一访问者模式(Visitor Pattern)【行为型】
- 手机计算机快速切换功能,群控系统快速切换多部手机
- FlashFXP v3.5.4注册码+FlashFXP v3.6.0注册码+FlashFXP v3.7.2.build.1266...
- comtrol 终端服务器,终端服务器:远程控制台管理———终端服务器
- spring boot火车票预订系统毕业设计-附源码091029
- 基于Docker-compose编排部署sentiment-analyzer情感分析系统(老保姆级讲解-部署)
- 微信内转发APP及h5类域名怎么做到防封防拦截,微信域名防红技术原理
- SpriteKit从零开始~Physics and Collisions
- [GXYCTF2019]Ping Ping Ping 1解题思路
- Caffe中BN层与CONV层的融合(merge_bn)
- HP电池警告,系统侦测到电池可储存容量过低,为了最佳效能,这颗电池可能需要更换。主电池(601),Enter-继续启动,解决方法
热门文章
- SpringBoot异常处理-自定义HandlerExceptionResolver
- 多线程——线程的生命周期
- 利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件
- 210317阶段三opencv
- JAVA识别字符串是数字(英文)还是汉字,web页面进行字符截断的帮助类
- Notepad++去除代码行号的几种方法
- 华为OJ: 公共字符串计算
- Android多线程研究(1)——线程基础及源码剖析
- CentOS 6.0安装ipvsadm 1.26错误笔录
- ConnectivityManager ConnectivityService in Android