Signals 库如何改进你的程序?

优质
小牛编辑
133浏览
2023-12-01
  • 函数和函数对象的灵活多点回调

  • 健壮的触发器及事件处理的机制

  • 兼容于函数对象工厂,如 Boost.Bind 和 Boost.Lambda

Boost.Signals 库具体化了信号(signals)和 插槽(slots),信号指的是某种可被"抛出"的 东西,而插槽是接收该信号的连接者。这是一种著名的设计模式,它还有另外一些名字 Observer, signals/slots, publisher/subscriber, events (和 event targets),这些名字指的都是同一个东西,指的是一些信 息源和某些对这些信息的变化感兴趣的实例之间的一对多关系。这种设计模式的使用有多种情况;最常见的是在GUI代 码中,用于使特定动作(例如,用户单击了一个按钮)与其它动作(按 钮改变它的外观,执行某个商业逻辑)松散连接。信号与插槽 在许多场合都很有用,解耦动作的触发条件(信号)和处理它的代码(一 个或多个插槽)。它可用于动态改变处理代码的行为,允许同 一信号对应多个处理,或者通过一个信号及插槽的类型间的抽象关联来降低类型依赖性。通过使用 Boost.Signals, 可 以创建一些信号来接受任意给定的函数特征的插槽,即插槽接受任意类型的参数。这种方法使得该库非常灵活;它适用于任意范围的信号需求。通过对信号源和处理 者的解耦,系统无论在物理和逻辑依赖上都变得更为健壮。它可以让信号类型对插槽类型完全一无所知,反之亦然。这对于更高层次的可复用性是很有必要的,它有 助于打破依赖性的循环。因此,一个信号与插槽的库不仅仅关系到面向对象的回调,它也关系到使用它的整个系统的健壮性。