本片文章主要介绍boost::function的用法。 boost::function 就是一个函数的包装器(function wrapper),用来定义函数对象。
Boost.Function 库包含了一个类族的函数对象的包装。它的概念很像广义上的回调函数。其有着和函数指针相同的特性但是又包含了一个调用的接口。一个函数指针能够在能以地方被调用或者作为一个回调函数。boost.function能够代替函数指针并提供更大的灵活性。
Boost.Function 有两种形式:首选形式和便携式形式, 其语法如下:
首选形式 | 便携式形式 |
boost::function<float(int x, int y)>f | boost::function2<float, int, int>f |
但是便携式形式不是所有的编译器都支持的, 所以这里我只介绍首选形式。
我们可以看下如下的例子:
sum 可以理解为一个广义的函数对象了,其只用就是保存函数do_sum, 然后再调用之。
在很多系统中, 对于类的成员函数的回调需要做特殊处理的。这个特殊的处理就是“参数绑定”。当然这个超出了我们讨论的范围了。 boost::function对于成员函数的使用可以看下如下代码:
1 class X{ 2 2 public: 3 3 int foo(int a) 4 4 { 5 5 cout << a <<endl; 6 6 return a; 7 7 } 8 8 }; 9 9 int _tmain(int argc, _TCHAR* argv[]) 10 10 { 11 11 boost::function<int(X*, int)>f; 12 12 f = &X::foo; 13 13 X x; 14 14 f(&x, 5); 15 15 return 0; 16 16 }
我们发现, 对类的成员函数的对象化从语法是没有多大的区别。
上面的几个例子没有体现出boost::function的作用来, 这里在写一个例子。比如当程序执行到某一处的时候想绑定某一个函数, 但是不想立即执行, 我们就可以声明一个函数对象,给此对象绑定相应的函数, 做一些其他事情,然后再来执行绑定的函数, 代码如下:
1 void print(int a) 2 2 { 3 3 cout << a << endl; 4 4 } 5 5 typedef boost::function<void (int)> SuccessPrint; 6 6 int _tmain(int argc, _TCHAR* argv[]) 7 7 { 8 8 vector<SuccessPrint> printList; 9 9 SuccessPrint printOne = boost::bind(print, _1); 10 10 printList.push_back(printOne); 11 11 SuccessPrint printTwo = boost::bind(print, _1); 12 12 printList.push_back(printTwo); 13 13 SuccessPrint printThree = boost::bind(print, _1); 14 14 printList.push_back(printTwo); 15 15 // do something else 16 16 for (int i = 0; i < printList.size(); ++i) 17 17 printList.at(i)(i); 18 18 return 0; 19 19 }
上述代码中首先把声明一个函数对象 typedef boost::function<void (int)> SuccessPrint, 然后把print绑定到斥对象中, 放入vector中, 到最后才来执行这print()函数。
文章浏览阅读1.3k次。IntelliJ IDEA 在老板本中设置修改文件被修改颜色提示与2018.3不同,这里介绍2018.3版本的修改方式:————————————————版权声明:本文为CSDN博主「DL_jianglin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/DL_jianglin/article/details/84951493..._idea 怎么像svn一样一眼看出哪个文件被修改了
文章浏览阅读6.7k次,点赞8次,收藏48次。Pandas 读取文件,CSV 文件读取参数详解。_python read_csv
文章浏览阅读1k次。概述通过学习文档内容,熟悉并掌握 IIS 写入漏洞利用工具的利用方法,了解具体的功能内容,亲自实践操作,并根据课程需求完成相关任务。工具功能说明IIS 写入漏洞利用工具是由桂林老兵写的一款漏洞利用工具,专门针对 IIS 写入漏洞。接下来我们具体介绍一下相关的使用。1.第一部分数据包格式该功能模块默认的数据包传输方法有 7 种,分别是:OPTIONS 返回服务器的各种信息PUT 生成上传文件数据包的。POST 用来提交表单MOVE 是改名数据包。COPY 是复制数据包。DELETE_iis短域名
文章浏览阅读3k次。在过去的一年中,加密经济经历了新一轮波动,DeFi生态领域的应用是快速发展的代表之一。在DeFi顶级风口下,NFT火爆出圈,不断获得全球范围各层组织对NFT的认可,但NFT从本质上来看依旧处于fomo阶段,何时稳定发展依旧要看市场反馈。与此同时,元宇宙概念在2021年下半年火爆起来,元宇宙作为新型虚实相融的互联网应用和社会形态,通过沉浸式的体验,让虚拟进一步接近现实。但元宇宙能否成功搭建新型数字社会体系,依然处于概念发展阶段。而不论是DeFi生态,亦或是NFT及元宇宙生态,都离不开区块链底层技术的支
文章浏览阅读3.6k次,点赞5次,收藏9次。主要的代码就是 VueApp获取挂载元素 然后改写errorHandler 系统报错 和 warnHandler 系统警告方法。可以看到 控制台并没有报错 只是输出了报错信息 这样的字符串 我们也可以直接传给服务器 存储报错信息。也是在vue节点中 重写errorHandler和 warnHandler 方法。只用console输出一下 警告或报错提示 便结束方法。vue3 在 main.js中编写代码。vue2 在 main.js中编写代码。..._vue屏蔽报错
文章浏览阅读972次,点赞18次,收藏3次。最近在巩固之前学过的知识,便想先从webpack开始,也是重新巩固学习,因为是蛮久之前学的所以一些新版本也还不够了解,希望得到一些大佬的指导让自己进步快一些,这里先提前谢谢各位老师了!_hp webpack
文章浏览阅读592次。 /****** Object: UserDefinedFunction [dbo].[fn_SO_GetIssuedQty] Script Date: 12/11/2009 08:53:15 ******/SET ANSI_NULLS ONGO SET QUOTED_IDENTIFIER ONGO /********************************** 销售订单跟
文章浏览阅读1.4k次。自减运算:–其用法用++的用法一模一样,是在原来值的基础上减掉1对于+=的用法,还有其它几种形式:i -= 1; //等价于: i = i-1;i = 1; //等价于: i = i1;i /= 3; //等价于: i = i/3;i %= 2; //等价于: i = i%2;..._c语言自减
文章浏览阅读3.1k次。ZZZ Project All Product将为您带来ZZZ Project的所有程序,产品能够有效的增强.net框架,并支持使用批处理命令优化数据库的性能,并为您的项目添加许多功能,例如Entity Framework Classic使用不仅可提供Entity Framework 6(EF6)的所有功能,并且将会带来更好的性能,而Entity Framework Extensions...
文章浏览阅读129次。什么是反向代理首先要知道什么叫正向代理,举例:一个微商卖东西,随着顾客量增多,就需要招聘代理人员帮忙卖,在程序上直观的效果就是这个很容易理解,那么什么是反向代理。反向代理:反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
文章浏览阅读387次,点赞5次,收藏2次。STL的排序函数sort()的定义有两种方式:(1)sort(begin,end)(2)sort(begin,end,compare)无返回值,基于快速排序,范围是[first,last),包括first,不包括last,复杂度是O(nlog2(n))sort()的比较函数可以用系统的4种函数排序,常用的是降序和升序,即less()和greater()#include<bit..._sort(x,partial=2)[2]
文章浏览阅读320次。关灯小游戏:简单说明:简单代码实现:import javax.swing.*;import java.util.*;public class Light { public static void main(String[] args) { //初始化棋盘 int[][] games = new int[10][10]; R..._关灯小游戏