回调函数,仿函数(functor)的区别及各自应用场景

区别:回调函数是一个被作为参数传递的函数。在C语言中,回调函数只能用函数指针实现,在C++、Python、ECMAScript中还能使用仿函数或匿名函数。仿函数(functor),就是使一个类的使用看上去像一个函数。其实现是类中实现一个operator(),这个类有了类似函数的行为,就是一个仿函数类。

回调函数

回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现,在C++、Python、ECMAScript等更现代的编程语言中还可以使用仿函数或匿名函数。

回调函数的使用可以大大提升编程的效率,这使得它在现代编程中被非常多地使用。同时,有一些需求必须要使用回调函数来实现。

非常知名的回调函数调用有C/C++标准库stdlib.h/cstdlib中的快速排序函数qsort和二分查找函数bsearch中都会要求的一个与strcmp类似的参数,用于设置数据的比较方法。

回调函数在实际中有许多作用。假设有这样一种情况:我们要编写一个库,它提供了某些排序算法的实现(如冒泡排序、快速排序、shell排序、shake排序等等),为了能让库更加通用,不想在函数中嵌入排序逻辑,而让使用者来实现相应的逻辑;或者,能让库可用于多种数据类型(int、float、string),此时,可以使用函数指针,并进行回调。

仿函数

仿函数(functor),就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。

有时仿函数的使用是为了函数拥有类的性质,以达到安全传递函数指针,依据函数生成对象,甚至是让函数之间有继承关系,对函数进行运算和操作的效果。比如set就使用了仿函数less ,而less继承的binary_function,就可以看作是对于一类函数的总体声明了,这是函数做不到的。

仿函数还给出了static的替代方案,函数内的静态变量可以改成类的私有成员,这样可以明确地在析构函数中清除所用的内容,如果用到了指针,那么这个是不错的选择。有人说这样的类已经不是仿函数了,但其实,封装后从外界观察,可以明显地发现,它依然有函数的性质。

延伸阅读:

什么是计算机函数?

计算机的函数,是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能的同时,还带有一个入口和一个出口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数值代入子程序,供计算机处理;所谓出口,就是指函数的函数值,在计算机求得之后,由此口带回给调用它的程序。

文章标题:回调函数,仿函数(functor)的区别及各自应用场景,发布者:小编,转载请注明出处:https://worktile.com/kb/p/38887

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年2月20日 上午12:44
下一篇 2023年2月20日 上午12:45

相关推荐

  • 如何做好工程项目生产管理

    项目生产管理是保障工程顺利进行的关键所在,良好的沟通机制、严谨的时间规划、高效的资源分配、细致的质量控制以及精准的风险管理是实施有效工程项目生产管理不可或缺的要素。特别是在严谨的时间规划方面,一个合理的时间管理计划不仅能确保项目按期完成,还能显著提高资源利用率和降低成本,对整个工程项目的经济效益和品…

    2024年4月11日
    3600
  • 有什么安排自己事情进度的软件

    安排自己事情进度的软件有:一、PingCode;二、Worktile;三、Wrike;四、Smartsheet;五、Clarizen。PingCode 是国内2021年软件项目管理榜单排名名列前茅的项目管理软件(36氪发布),在软件项目管理方面它有着非常多其他软件都不具备的优势。 一、PingCod…

    2023年4月30日
    28100
  • 好的优化方案有:一、确保正确的索引;二、避免使用SELECT*;三、分页查询;四、使用批量插入;五、避免使用子查询;六、避免在查询中使用函数;七、使用分区表;八、优化服务器硬件;九、使用缓存;十、数据库分片。 一、确保正确的索引 索引是提高查询速度的关键。在Mysql中,正确的索引可以极大地影响查询…

    2023年5月30日
    23800
  • 研发管理是什么

    研发管理就是在研发体系结构设计和各种管理理论基础之上,借助信息平台对研发过程中进行的团队建设、流程设计、绩效管理、风险管理、成本管理、项目管理和知识管理等的一系列协调活动。 研发管理,是一个较为宽泛的管理范畴。可以从狭义和广义两个方面来进行理解: 狭义的定义 是指对研发或技术部门及其工作进行管理,重…

    2022年11月14日
    72300
  • vite和webpack的区别

    Vite和Webpack都是现代前端开发中的常见打包工具,但在实际使用过程中,它们存在五个主要区别:1.开发模式不同;2.打包效率不同;3.插件生态不同;4.配置复杂度不同;5.热更新机制不同。总的来说,Vite的开发环境启动速度和模块热更新速度相比Webpack有显著提升,而Webpack的生态系…

    2023年5月18日
    10.2K00
  • 项目部司机如何管理团队

    项目部司机在管理团队时应重视沟通效率、规则建立、职业培训、及时响应、激励机制、安全标准。其中,沟通效率尤为关键,因为它确保了队伍中的每个成员都可以快速准确地获得信息,对于执行任务和决策至关重要。项目部司机要定期召开会议,使用高效的通讯工具,确保信息流动畅通无阻。 一、沟通效率 一个成功的项目部司机团…

    2024年4月10日
    5500
  • soc和cpu的区别

    soc和cpu的区别主要在于定义不同,但SoC里包涵CPU。SoC称为系统级芯片,是一个有专用目标的集成电路,其中包含完整系统并有嵌入软件的全部内容。CPU是指单一的中央处理器,是一块超大规模的集成电路。它的功能主要是解释计算机指令以及处理计算机软件中的数据。 SoC称为系统级芯片,是一个有专用目标…

    2023年1月31日
    2.3K00
  • 深度:PMF是什么?为什么它对企业服务公司如此重要?要如何建立企业的PMF?

    本篇文章将围绕以下问题展开:1、PMF(产品和市场的匹配度)是什么?2、为什么它对企业服务公司如此重要?3、企服行业要如何找到自己的PMF PMF和产研体系都是比较大的话题,但随着SaaS公司的业务从初级阶段走向规模化增长阶段,这也是必然被产品团队/创始团队关注的问题。 希望通过这次发布会,分享我们…

    2022年9月7日
    1.3K00
  • oa衣服贵吗

    OA衣服价格波动较大,受因素影响不一。概括来讲,品牌、设计、制作材料、销售渠道、限量版或合作系列等均影响成本与定价,个别款式或系列可能显著高于市场平均价位。OA衣服在设计师品牌中,定位相对较高,倾向于优质面料和独特设计,因此价格普遍不菲。以面料选择为例,若使用高级进口面料,相比于常见面料成本更高,反…

    2024年1月11日
    27400
  • 敏捷看板和任务板怎么区分

    敏捷看板和任务板的区别有:一、用途不同;二、粒度不同;三、功能不同;四、适用范围不同。敏捷看板的用途包括:可视化迭代过程、优化团队协作、提高工作效率。任务板的用途包括:可视化任务管理、优化任务分配、提高工作效率。 一、用途不同 敏捷看板的用途包括:可视化迭代过程、优化团队协作、提高工作效率。 任务板…

    2023年4月16日
    92101

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部