Boost :: Signals有什么意义?

时间:2010-11-25 03:43:15

标签: c++ boost signals boost-signals boost-signals2

首先,我是编程的绝对初学者,所以不要嘲笑我太多 我见过的唯一信号是GUI工具包,GUI工具包都带有自己的信号。那么,Boost:信号甚至可以与这些GUI工具包一起使用吗?这是个好主意吗?信号有哪些其他应用?

4 个答案:

答案 0 :(得分:6)

Signals是一种事件消息传递实现,与其他各种(例如C#)语言中的Smalltalk / Objective C 消息事件非常相似。

您可以将它们用于各种任务,请查看Observer Pattern

为什么要使用观察者模式?

这些好处主要是组织性的,当您使用大型应用程序时,应用重用模式非常重要,这有助于保持开发团队的一致性。

当特定模式的实现变得事实上(或接近)时,它特别有用,因为这意味着新团队成员的准备时间可能会加快,不仅是因为他们之前已经使用过该实现,而且因为实施的普及意味着有广泛的资源和文件可用于加速学习。

从纯代码的角度来看,所有模式都显得臃肿,但是当您开始明白软件开发中涉及的60%以上的成本都处于维护生命周期时,获得一致性的额外代码是值得的。

另一个好处是帮助软件重用,取决于实现的风格,Observer Pattern可以帮助模块化和将类彼此分离。我建议这也是一个组织上的好处,因为不同的团队可以更容易地构建组件,或者仅仅因为组件更容易替换。

答案 1 :(得分:4)

仅仅是我的两分钱,信号不仅用于(或用于)GUI工具包。它们用于你想要将数据的生成者与其接收者(例如,上面提到的观察者模式)分离的上下文中。如果你将这个想法与线程混合在一起,你可以轻松地实现actor,一个有趣的并发任务模式(例如Erlang和Scala使用actor)。

答案 2 :(得分:2)

一种可能的用途是在 of GUI工具包中实现。你基本上设置了接线来从本机系统获取消息(或者它们碰巧被调用的任何信息)以产生信号。从那里,路由和处理信号的代码可以(至少在某种程度上)是可移植的。

答案 3 :(得分:2)

除了其他人提到的Observer模式之外,任何时候你发现自己必须编写一个回调函数,以便一个类可以通知另一个类已发生的事情,那么你可以使用Signals和Slots。回调的最大优点是它可以处理大量的锅炉板代码来添加和删除回调函数,并在调用者或被调用者超出范围时处理自动断开连接。

回调实际上只是Observer模式的一个实例。