Boost库——signals2的用法总结

3 篇文章 0 订阅

             signals2基于boost的另一个库signals,实现了线程安全的观察者模式。在signals2库中,观察值模式被称为信号/槽(signals and slots),它是一种函数回调机制,一个信号关联了多个插槽,当信号发出去时,所有关联它的插槽都会被调用。许多成熟的软件系统都用到了这种信号/槽机制(另一个常用的是事件处理机制:event / event handler),它可以很好的解耦一组互相协作的类,有的语言甚至直接内建了对它的支持(如C#),signals2以库的形式为C++增加了这个重要的功能。signals2库位于名字空间Boost::signals2,为了使用signals2组件,需要包含头文件<boost/signals2.hpp>,即:

          #include <boost/signals2.hpp>

          using namespace boost;

与signals的区别:
          signals是Boost库中另一个信号/插槽库,实际上signals2的实现是基于signals的。signals2与signals最大的区别是具有线程安全,能够用于多线程环境,而且不需要编译就可以使用。signals2在结构、接口、设计原理等许多方面都模仿了signals,但也有一些很多变化,例如默认信号调用返回是一个optional对象、combiner()函数改为set_combiner()、connection对象不再拥有block()方法等等。

与C#的区别:
           signals2中的信号/插槽机制原理上类似于C#语言的event/delegate机制,但是C#的delegate的功能要比signals2弱,它要求精确的类型匹配,也没有合并器的概念,只能返回一个结果。delegate使用operator+=来连接event与delegate,signals2则使用connect()函数。这是因为signals2在设计时认为operator+=并没有带来太多的好处,反而会导致连续使用+=连接、operator-=等其他语义问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值