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

news2024/11/19 9:22:14

在这里插入图片描述

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的信号机制的一点参考,然后利用模板实现:在新线程执行可变函数参数的调用

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python动态分配内存:了解它的工作原理

Python动态分配内存:了解它的工作原理 Python是一种高级编程语言,它在处理内存和垃圾回收方面具有独特的方式。在Python中,内存分配和释放是动态的,并且由解释器自动完成。这意味着,Python程序员无需手动管理内存&…

C/C++/Qt 文件操作 效率比较

C/C/Qt 文件操作 & 效率比较 1 介绍2 比较结果2.1 Linux平台上运行程序普遍比Windows上快;Windows下VC编译的程序一般运行比MINGW(MINimal Gcc for Windows)快2.2 二进制文件的操作要快于文本文件;写文件的操作要快于读文件&a…

chatgpt赋能python:Python剔除函数的使用介绍

Python剔除函数的使用介绍 在Python编程中,剔除函数是非常有用的工具,它可以帮助程序员快速筛选出不符合条件的数据。本文将介绍剔除函数的概念和常见用法,以及如何有效使用剔除函数解决实际问题。 剔除函数的概念 剔除函数是指Python中的…

反射相关知识点

这里写目录标题 反射概述获取Class对象的三种方式总结具体代码演示 获取构造方法以及构造方法里的信息利用Class对象调用对应方法,以及用调取出来的Constructor(构造器类)创建对象具体代码 获取成员变量利用Class对象调用对应方法&#xff0c…

chatgpt赋能python:Python加速读取CSV文件的方法

Python加速读取CSV文件的方法 介绍 CSV文件是一种常见的数据格式,因为其简单和易于理解,被广泛应用于数据处理和数据分析。然而,在处理大型CSV文件时,读取速度会成为问题。Python作为一种高级编程语言,具有易学易用的…

AI+是企业管理软件的下一站和终点站

作为GPT综合症的表现,准备陆续写一点关于AI的文章。就从这一篇开始吧。 这篇文章原来是在2019年1月份我发在新浪微博和LinkedIn上的。刚搜了一下,全然不见了踪影。原因大家也都知道。但是,我想那个思想的小火花一定还在,在某处酝…

Jenkins概念及安装配置教程(三)

如何配置Jenkins? Jenkins 中的用户管理 要在 Jenkins 中管理用户,您应该导航到管理 Jenkins 🡪 配置全局安全。理想的选择是让 Jenkins 拥有自己的用户数据库。您可以创建一个只有读取权限的匿名用户。为您打算在下一步中添加的用户创建条…

【ARMv8 SIMD和浮点指令编程】NEON 加法指令——加法都能玩出花

向量加法包括常见的普通加指令,还包括长加、宽加、半加、饱和加、按对加、按对加并累加、选择高半部分结果加、全部元素加等。如果你和我一开始以为的只有一种普通加,那就太小看设计者了!同时这么多加法指令的确会提升我们设计程序的效率&…

numpy包中的编码函数和解码函数numpy.char.encode() numpy.char.decode()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 numpy包中的编码函数和解码函数 numpy.char.encode() numpy.char.decode() [太阳]选择题 下列代码最后输出的结果是? import numpy as np x np.array([I, Love, Python]) print(…

Python jieba库

前言 Jieba库是优秀的中文分词第三方库,中文文本需要通过分词获得单个的词语。 Jieba库的分词原理:利用一个中文词库,确定汉字之间的关联概率,汉字间概率大的组成词组,形成分词结果。除了分词,用户还可以…

【数据库原理与应用 - 第八章】数据库的事务管理与并发控制

目录 一、事务管理 1、概念及特性 2、事务控制 (1)事务控制语句 显示事务举例 二、并发控制 1、问题引入 2、并发执行带来的问题 (1)丢失修改 (2)不可重复读 (3)读"…

[自学记录02|百人计划]纹理压缩

一、什么是纹理压缩 纹理压缩是为了解决内存、带宽问题,专为在计算机图形渲染系统中存储纹理而使用的图像压缩技术。 1.图片格式和纹理格式的区别 (1)图片格式 图片格式是图片文件的存储格式,通常在磁盘、内存中储存和传输文件时使用;例如…

单片机GD32F303RCT6 (Macos环境)开发 (三十三)—— 光照传感器 (BH1750)

GD32 光照传感器 BH1750的使用 1、GPIO模拟i2c配置 使用管脚为SCL PB10 SDA PB11,移植代码时可换自己的管脚。软件模拟i2c在十九章中讲过,与其不同的地方是,这里的us延时函数,换成了定时器3做us级的延时。 tim3的配置&#xf…

linux 找回root密码(CentOS7.6)

linux 找回root密码(CentOS7.6) 首先,启动系统,进入开机界面,在界面中按“e”进入编辑界面。如图 2. 进入编辑界面,使用键盘上的上下键把光标往下移动,找到以““Linux16”开头内容所在的行数”,在行的最后…

java-字符流和字节流(二)

java-字符流和字节流(二) 一、字节缓冲流 1.1字节缓冲流构造方法 字节缓冲流介绍 BufferOutputStream:该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用 BufferedIn…

chatgpt赋能python:Python动图如何优化SEO?

Python动图如何优化SEO? Python是一种高级编程语言,广泛应用于数据分析、人工智能和网站开发等领域。Python还支持创建动态图像,这些动态图像通常用于数据可视化、演示和教育目的。在本文中,我们将探讨如何使用Python创建动态图像…

chatgpt赋能python:Python加f之SEO的重要性

Python加f之SEO的重要性 随着互联网的不断发展和普及,越来越多的企业和个人纷纷进入到了网站建设,网络营销的大军之中。而SEO作为重要的一环,在各个领域内也变得愈加重要。而Python中的f字符串是近些年来引起广泛关注的一种新的字符串格式化…

chatgpt赋能python:Python动态内存分配:如何优化你的代码

Python动态内存分配:如何优化你的代码 在编写Python代码时,你可能已经注意到内存使用方面的一些问题。Python动态内存分配是一个重要的话题,它涉及到Python程序如何在运行时使用内存。本文将向您介绍Python动态内存分配的基本概念和如何优化…

chatgpt赋能python:Python动态代码在SEO中的重要性

Python动态代码在SEO中的重要性 Python是一种非常流行的编程语言,用于开发Web应用程序、数据分析、人工智能和机器学习。Python的动态代码能够动态生成HTML、CSS和JavaScript来创建动态网页。这种能力使Python在SEO中非常有用,因为它可以帮助网站排名更…

chatgpt赋能python:如何使用Python制作动画?

如何使用Python制作动画? Python是一种高级编程语言,被广泛应用于各种领域,包括动画制作。Python的简洁性和强大的功能使得它成为一个很好的选择来制作动画。在这篇文章中,我将向您介绍使用Python如何制作动画。 第一步&#xf…