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