当前位置: 首页 > news >正文

Qt 和 Boost关于信号和槽的对比说明


对比

无论是 Qt 的实现方式还是 Boost 的实现方式,除了必须的定义信号和槽的类之外,都不需要额外的类。

两种实现都解决了类爆炸的问题。下面让我们对照着来看一下我们前面的分析。

  • 两个不同的术语以及各自的动作:信号和槽

  • 在一个地方(信号)可以连接零个或者多个回调函数(槽)同时也是多对多的,一对多,多对多

  • 焦点在于连接本身,而不是提供者或者消费者;

  • 不需要手工为了一个连接创建新的类

  • 连接仍旧是类型安全的

这五点是信号槽系统的核心,Qt 和 boost 都拥有这些特性。

 

下面则是二者的不同之处:

Boost.SignalsQt Signals 和 Slots
信号一个信号就是一个对象
全局的、局部的或者是成员对象
信号只能是成员函数
调用发出信号类似于函数调用
任何能够访问到信号对象的代码都可以发出信号
发出信号类似于函数调用
Qt 提供了一个 emit 关键字来完成这个操作
只有信号的拥有者才能发出信号
槽是任何可被调用的函数或者函数对象槽是经过特别设计的成员函数
返回值可以有返回值?,返回值可以在多个槽中使用没有返回值
同步异步同步同步或(直连)者异步(队列)
线程安全非线程安全?线程安全,可以跨线程使用
信号断开当且仅当槽是可追踪的时候?,槽被销毁时,连接自动断开槽被销毁时,连接都会自动断开(因为所有槽都是可追踪的)
类型安全类型安全(编译器检查)类型安全(运行期检查)
参数列表参数列表必须完全一致槽可以忽略信号中多余的参数(信号的参数可以比槽多)
信号、槽可以是模板信号、槽不能是模板
底层实现C++ 直接实现通过由 moc 生成的元对象实现(moc 以及元对象系统都是 C++ 直接实现的)
内省没有内省机制可以通过内省发现

可以通过元对象调用

连接可以从资源文件中自动推断出

?都是有疑问的地方。目前还未理解

最重要的是,Qt 的信号槽机制已经深深地植入到框架之中,成为不可分割的一部分。它们可以使用 Qt 专门的开发工具,例如 QtCreator,通过拖拽的方式很轻松的创建、删除、修改。它们甚至可以通过动态加载资源文件,由特定命名的对象自动动态生成。这些都是 boost 作为一个通用库所不可能提供的。

 

-----------------------------------------------------------------------------------------------------------------------------------

 

转帖地址:http://no001.blog.51cto.com/1142339/1335733/

转载于:https://www.cnblogs.com/cthu/p/5135917.html

相关文章:

  • APT典型应用示例
  • 20160119--进销存系统分析
  • Swift教程之typealias代替OC的typedef
  • 安装XAMPP
  • ubuntu15.10安装 jdk
  • 属性与字段的区别
  • 使用OGGquot;Loading data from file to Replicatquot;的方法应该注意的问题:replicat进程是前台进程...
  • java 单例模式总结
  • MAC下配置OpenCV的具体方法(2016年最新)
  • iOS 后台操作的开发(转)
  • Number 类型
  • 关于Oracle数据库分页查询的小技巧
  • Java重定向标准输入/输出
  • Show Processlist
  • FZU2150 Fire Game BFS搜索
  • ES6指北【2】—— 箭头函数
  • 「译」Node.js Streams 基础
  • 30天自制操作系统-2
  • CEF与代理
  • Docker: 容器互访的三种方式
  • extract-text-webpack-plugin用法
  • idea + plantuml 画流程图
  • java8 Stream Pipelines 浅析
  • java小心机(3)| 浅析finalize()
  • jquery cookie
  • mysql 数据库四种事务隔离级别
  • RxJS: 简单入门
  • SQLServer之索引简介
  • ucore操作系统实验笔记 - 重新理解中断
  • Vue 重置组件到初始状态
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 闭包--闭包作用之保存(一)
  • 搞机器学习要哪些技能
  • 关于Flux,Vuex,Redux的思考
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 小程序button引导用户授权
  • 怎样选择前端框架
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • (52)只出现一次的数字III
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (Java)【深基9.例1】选举学生会
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)JAVA使用POI操作excel
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (七)理解angular中的module和injector,即依赖注入
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)EOS中账户、钱包和密钥的关系
  • (转)ORM
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET Micro Framework 4.2 beta 源码探析