zoukankan      html  css  js  c++  java
  • c++中的signal机制

    简介

    signal是为了解决类之间通信的问题而出现的,更深入的原因是面向对象讲究封装,但是封装必然导致类之间沟通困难,但是使用接口的方式又太重量级--需要写很多代码,而且会导致接口爆炸

    比如你需要把一个接口拆分为两个时,你得做很多工作,这个时候signal的好处就出现了

    signal库

    signal库主要有QT的signal,boost的signal与signalslot(http://sigslot.sourceforge.net/)

    这里谈谈signalslot

    使用它需要定义signal,然后将成员函数绑定到signal上面,实现方法不外是functor

    带槽的类需要继承一个has_slot,可以猜到has_slot的目的是配合signal进行信号和槽的生存期管理,这样类销毁的时候不需要手动去disconnect

    我司的signal系统

    公司有一套庞大的模板代码,里面有很多轮子,其中就包含了signal系统,公司的signal库其实相比以上这些有一个很大的优势,使用多个signal的时候不需要声明对个signal实例,你只需要带有一个signalHolder,然后新加信号

    只需要一个signalID和其对应的函数声明就行了,这有个很大的好处:少些很多代码,也更灵活.

    但是公司的signal没有生存期管理,这意味着你必须手动在signalHolder中删除槽,这样的好处是降低了复杂度--让带槽类再去继承一个类实在是很丑陋,也让使用者很费解

    而且在实际的工程中我也发现需要自动生存期管理的情况很少,手动删除槽的代码量也不是很大

    末尾吐槽一下微软的STL实现,用宏实现的模板多参实在是太丑陋了,用宏导致stl编译错误有如天书,我准备自己实现functor和bind了

  • 相关阅读:
    决策树【机器学习】
    ACM数论【乘法逆元】
    朴素贝叶斯法【机器学习】
    STL中的一些算法的整理【总结-STL整理】
    感知机【机器学习】
    K近邻法【机器学习】
    【hiho一下】41 斐波那契数列【矩阵快速幂】
    floyd算法【图论
    dijkstra算法【图论
    SPFA算法【图论
  • 原文地址:https://www.cnblogs.com/mightofcode/p/3161311.html
Copyright © 2011-2022 走看看