4

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

4

4 回答 4

6

Signals 是一个事件消息实现,很像 Smalltalk/Objective C消息或各种其他(例如 C#)语言中的事件

您可以将它们用于各种各样的任务,看看观察者模式

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

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

当特定模式的实现成为事实上(或接近)时,它特别有用,因为这意味着新团队成员的准备时间可能会加快,不仅如果他们以前使用过该实现,而且还因为流行实施将意味着有广泛的资源和文档可用于加速学习。

从纯代码的角度来看,所有模式都显得臃肿,但是当您开始了解软件开发所涉及的超过 60% 的成本都在维护生命周期中时,获得连贯性的额外代码是非常值得的。

另一个好处是有助于软件重用,根据实现的风格,观察者模式可以帮助模块化和解耦类。我建议这也是一种组织优势,因为不同的团队可以更轻松地构建组件,或者仅仅是因为组件更容易替换。

于 2010-11-25T03:48:47.270 回答
4

就我的两分钱,信号不仅用于(或用于)GUI工具包。它们用于您希望将数据的生产者与其接收者解耦的上下文中(例如,上面提到的观察者模式)。如果你把这个想法和线程混合起来,你可以很容易地实现actor,这是一种有趣的并发任务模式(例如,Erlang 和 Scala 使用actor)。

于 2010-11-25T21:54:46.740 回答
2

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

于 2010-11-25T03:54:52.020 回答
2

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

回调实际上只是观察者模式的一个实例。

于 2010-11-25T22:48:46.037 回答