在 C++ 中设计一种事件机制,其中实体既可以是侦听器(对于某些事件),也可以是生成器(对于某些事件)

Designing an event mechanism where an entity can be both listener (for some events) as well as generator (for some events) in C++

提问人:Karan Kumar 提问时间:8/8/2022 最后编辑:Karan Kumar 更新时间:8/9/2022 访问量:111

问:

我正在尝试用 c++ 为事件机制创建一个基本设计,该机制可以有多个事件生成器和侦听器。这里需要注意的是,对象可以充当侦听器(对于某些事件)和生成器(对于某些其他事件)。我很难弄清楚正确的设计。请提出任何建议。

我最初想到的是创建 IListener 和 IGenerator 接口,它们将由具体/实际的侦听器和生成器继承。但是,让类继承这两个接口似乎不是一个好的设计(不确定)。此外,除此之外,有没有一种方法可以限制生成器仅发送事件列表(枚举)中特定类型的事件。?

C++ OOP 事件 设计模式 C++17

评论

0赞 Pepijn Kramer 8/8/2022
最后,事件机制(没有线程/解耦)只是给定函数签名的回调函数列表,例如>,调用事件只不过是遍历该列表。将其放在一个类中,并在需要时进行聚合。侦听器将此类函数传递给生成器。如果生成器可以“转发”事件,则它再次具有侦听器列表。它可以注册其成员之一来处理事件并调用自己的侦听器列表。std::vector<void()
0赞 Dmytro Ovdiienko 8/8/2022
作为侦听器,您的类应根据需要实现尽可能多的接口。此外,它应该根据需要实现尽可能多的重载,并根据需要实现尽可能多的重载IAbcListenerRegisterListenerNotifyAbc
0赞 Homer512 8/8/2022
我建议你使用组合:主对象可以包含多个侦听器和生成器。侦听器调用的回调可以是可以引用父对象的任意回调std::function

答: 暂无答案