【发布时间】:2019-01-21 21:02:34
【问题描述】:
想象一个简单的双调度事件处理方案:
这很酷。而且它有效。但是我在这里看到了几个问题:
- EventHandlerInterface 必须明确知道所有事件。
- 由于 (1) 处理程序可能会因订阅未使用的事件而产生较大的空间开销。
我希望这个结构看起来更像这样:
如您所见,我希望不同模块产生不同的事件类型,并且我希望每个模块只实现必要的事件处理接口。我不知道如何将这一切联系在一起。理想情况下,我希望有一个准备好接受任何事件的 EventServices 列表。
我可以在这里想到的一件事是,为每个 EventHandlerInterface 类型继承一个 EventService,并将事件处理程序向下转换为 notify 方法中的特定类型。但是它不是类型安全的,而且看起来很丑陋。
我可以看到,第二种方法是将 EventService 设为模板并静态检查模板参数是否为 EventHandlerInterface 的子项。那将是类型安全的,并且几乎可以满足我的要求。但是,这样我就不能按照我的意愿将所有 EventServices 存储到一个列表/向量中。因此,这种方法并不可取。
实际上感觉就像我找错了方向,但我不知道如何找到正确的方向。
谢谢!
【问题讨论】:
-
您可能对观察者模式或事件管理的“信号和槽”方法更感兴趣。当您通常对所有或大部分类型感兴趣时,访问者是很棒的。
标签: c++ events architecture