回调函数与钩子函数的区别,另QT中connect函数的实现,lambda的使用

在这里插入图片描述

1、钩子函数是回调函数的一种

广泛来说两者都是一样的
严格来说
钩子函数的函数名早已被定义好,只是函数内部需要用户在应用层来定义,

1)可以完全通过宏来实现系统是否调用该函数(底层不封闭,修改宏的参数实现是否编译某块代码,然后重编译)
2)也可以通过函数指针,通过注册函数来实现(底层可以完全封闭,编译成库,然后通过应用层调用注册函数来实现系统调用哪些钩子函数)如下为注册函数的大概原理:
C语言 - 钩子函数详解

2、回调函数

在这里插入图片描述

回调函数和钩子函数

C语言回调函数和钩子函数
这两种函数的区别,简单说,其实就是钩子函数不一定会用到,而回调函数一定会用到,因为钩子函数是要等待某种状态发生才会用到,这种状态不一定会发生,而回调函数是为了某个目的设置的,只要这个目的是必须的就一定会调用到

C语言回调函数和钩子函数

c语言回调函数_【云里雾里】回调函数与钩子函数

lambda的使用

C++编译器对lambda表达式是当一个类来处理,类里含有()里的参数成员变量
并在执行该处代码时对该成员初始化,该成员变量在寄存器里或栈里
结果就是返回类的成员函数对象(public类型的operator()函数)
lambda表达式返回的也是一个函数指针

这里我们需要先对lambda表达式的实现原理做一下说明:当我们定义一个lambda表达式后,编译器会自动生成一个匿名类,这个类里面会默认实现一个public类型的operator()函数,我们称为闭包类型。那么在运行时,这个lambda表达式就会返回一个匿名的闭包实例,它是一个右值。
参考链接:c++中lambda表达式用法

作用:
1、lambda表达式作为回调函数
2、lambda表达式[]的捕获赋值,可以节省临时变量的赋值,原理就是lambda创建了一个类,[ ]里的捕获赋值只会初始化一次,详见上述参考链接

QT中connect函数

槽函数一般都是用lambda表达式来实现
这里的lambda表达式都是作为回调函数

但是这里的lambda表达式()里的参数是不固定的,不像下列sort函数
在这里插入图片描述
在这里插入图片描述

lambda表达式()里的参数是固定的,

所以要实现将可变参数的函数传入QT中connect函数的槽函数中
形参就不仅仅是固定形参列表的函数指针了

当把信号函数和槽函数传入后,根据FunctionPointer会解析出信号槽函数的返回值、所在类和形参列表

信号的参数数量必须大于等于槽函数的参数数量,信号的参数和槽函数的参数必须得兼容(类型一致或可以转化),信号槽的返回值的类型也必须得兼容

详情参考如下文章:
QT5中的connect的实现
对于qt5的信号机制的一点参考,然后利用模板实现:在新线程执行可变函数参数的调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/25227.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【2023 · CANN训练营第一季】MindSpore模型快速调优攻略 第二章——MindSpore调试调优

1.生态迁移 生态迁移工具使用示例 生态迁移工具技术方案 不同框架间模型定义前端表达差别巨大(相同算子的API技术难点 、 算子功能、模型构建方式差别较大); 对于同一框架,不管前端表达差异如何,最终对应的计算 图是相似的。因此提出&#x…

Kubernetes部署+kubesphere管理平台安装

Kubernetes官网;kubesphere官网 不论是Kubernetes官网还是找的其它部署步骤,基本都是推荐搭建集群的方式,是为了实现高可用.....等等,这样一来至少需要两台或三台的服务器来搭建,这样对我们的成本也是非常大的&#xf…

Axure教程——直方图(中继器)

本文将教大家如何用AXURE用中继器制作直方图 一、效果介绍 如图: 预览地址:https://yjkepz.axshare.com 下载地址:https://download.csdn.net/download/weixin_43516258/87842701 二、制作方法 (1)制作刻度表 设计5个刻…

CSDN上海城市开发者社区线下活动纪实

引言 5月27号中午,很高兴能和现CSDN副总裁、前微软 Azure 工程团队首席研发经理、技术畅销书《编程之美》及《构建之法》的作者邹欣邹老师,以及CSDN的 “上海城市开发者社区” 的部分成员齐聚一堂,参加CSDN上海城市开发者社区自5月初成立以来…

Ctfshow基础二刷(1)

前言: 前两天的信安给我整emo了,头一回打正经比赛,结果发现基础太差,代码审计烂得一踏糊涂。 寻思寻思,从头整一遍基础。又买了安恒出的新书。争取7号去吉林打省队选拔不给导儿丢脸吧呜呜 文件包含 web78: 这题一…

curl 命令-接口测试

curl 命令-接口测试 JUST DO IT 温暖春日 在linux/Unix 为代表的os上, 对后端进行测试, 模拟连接请求都会书写脚本 场景: 在Linux 上接口测试工具有ab, restClient, postman等, 最常用的方法是curl进行简单测试 curl是非常方便的Rest 客户端, 可以很方便的完成 Rest API测…

AcWing算法提高课-1.3.11二维费用的背包问题

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 本题链接&#xff08;AcWing&#xff09; 点这里 题目描述 有 N N N 件物品和一个容量是 V V V 的背包&#xff0c;背包能承受的最大重量是 M M M。 每件物品只能用一次。体积是 v i v_…

vcruntime140.dll丢失怎么办?怎么解决vcruntime140.dll丢失的问题

当您运行一个需要此文件的程序时&#xff0c;如果您的系统中不存在这个文件&#xff0c;会提示出错信息“找不到vcruntime140.dll”或“vcruntime140.dll丢失”。这种情况下&#xff0c;您需要解决这个问题&#xff0c;才能继续运行此应用程序。我们将介绍vcruntime140.dll丢失…

5.27下周黄金行情走势预测及开盘操作策略

近期有哪些消息面影响黄金走势&#xff1f;下周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周五(5月26日)黄金大幅下跌&#xff0c;主要受到美国数据影响&#xff0c;美国公布的4月PCE和耐用品订单数据向好&#xff0c;再次强化市场对美联储的鹰派押注。现货…

(四)ArcGIS空间数据的转换与处理——数据结构转换

ArcGIS空间数据的转换与处理——数据转换 空间数据的来源很多&#xff0c;如地图、工程图、规划图、航空与遥感影像等&#xff0c;因此空间数据也有多种格式。根据应用需要&#xff0c;需对数据进行格式转换&#xff0c;不同数据结构间的转换主要包括矢量数据到栅格数据的转换…

戏曲APP软件开发需具备哪些功能呢?

戏曲是我国的国粹&#xff0c;传统戏曲文化源远流长&#xff0c;博大精深&#xff0c;数千年以来一直都是深受大众喜欢的文化生活的重要环节。随着时代的推进&#xff0c;娱乐形式更加多样化&#xff0c;传统的剧场演出形式的戏曲传播方式已经跟不上时代发展以及人们的需求了。…

Office project 2016安装

哈喽&#xff0c;大家好。今天一起学习的是project 2016的安装&#xff0c;Microsoft Office project项目管理工具软件&#xff0c;凝集了许多成熟的项目管理现代理论和方法&#xff0c;可以帮助项目管理者实现时间、资源、成本计划、控制。有兴趣的小伙伴也可以来一起试试手。…

C++服务器框架开发4——日志系统logger/.cpp与.cc

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。 其教学视频见&#xff1a;[C高级教程]从零开始开发服务器框架(sylar) 上一篇&#xff1a;C服务器框架开发3——协程与线程的简单理解/并发与并行 C服务器框架开发4——日志系统logger 目前进度.cpp与.cc 目前进度 …

仓储服务-采购业务

1.合并采购需求 请求参数 {purchaseId: 1, //整单iditems:[1,2,3,4] //合并项集合 }(1) 合并时如果未选择合并的采购单&#xff0c;则先新建采购单然后合并到新建的采购单 新建的采购单&#xff0c;可以手动给采购单分配人员 &#xff08;2&#xff09;合并时选中了采购单…

Ansible基础五——条件语句、循环语句、handlers、任务失败处理

文章目录 一、 循环语句1.1 单量循环1.2 多量循环1.3 老版本用法1.4 loopregister 二、条件判断2.1 根据变量状态判断2.2 根据变量是否存在判断2.3 根据事实判断2.4 多条件判断2.4.1 and用法2.4.2 or用法 2.5 循环判断2.6 根据上个任务结果判断 三、handlers处理程序四、任务失…

C4d渲染农场的定义、应用领域和未来发展趋势

Cinema 4D&#xff08;C4D&#xff09;是一款常用于3D动画、建模和渲染的软件&#xff0c;由Maxon Computer开发。随着CG行业的不断发展和应用场景的多样化&#xff0c;C4D渲染农场成为了CG制作中不可或缺的一环。本文将深入介绍C4D渲染农场的概念、特点、应用以及未来发展趋势…

MYSQL索引连环18问(上)

MYSQL索引连环18问&#xff08;上&#xff09; 1.索引是什么&#xff1f; 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分)&#xff0c;它们包含着对数据表里所有记录的引用指针。索引是一种数据结构。数据库索引&#xff0c;是数据库管理系统中一个排序的…

使用electron套壳vue实现跨平台桌面应用

electron和vue是什么就不用多说了&#xff0c;前端都知道 先展示一波demo 传送门 前提条件 要有一个vue项目&#xff0c;老项目跳过 vue create hello-world改造vue项目 在根目录新建一个background.js文件&#xff0c;也可以叫其他名字&#xff0c;作为package.json的main…

如何查看mysql里面的锁(详细)

通过查询表统计信息查看 information_schema库下相关事务表和锁相关信息表介绍innodb_trx存储了当前正在执行的事务信息trx_id&#xff1a;事务ID。trx_state&#xff1a;事务状态&#xff0c;有以下几种状态&#xff1a;RUNNING、LOCK WAIT、ROLLING BACK 和 COMMITTING。trx…

shell变量的使用 rhce(25)

目录 1.总结变量的类型及含义&#xff1f; 2.实现课堂案例计算长方形面积&#xff1f;&#xff08;6种方式&#xff09; 3.定义变量urlhttps://blog.csdn.net/weixin_45029822/article/details/103568815&#xff08;通过多种方法实现&#xff09; &#xff08;1&#xff0…