C++ 在事件侦听器模式中包含问题

C++ Include Problem in Event Listener Pattern

我正在尝试在我的项目中使用 EventListener 模式(而不是 Observer)。基本上:

  1. Entitys 可以将自己注册为某些类型的 Events
  2. 的听众
  3. Entity 可以向 EventListener 报告 Event
  4. 当报告 Event 时,EventListener 将通知 Entity 个已注册接收此类 Event 的实例。

两个类是:

class Entity:
void Register(std::string type); // calls EventListener::RegisterListener(this, type);
void ReportEvent(Event event); // calls EventListener::BroadcastEvent(event);
void OnNotify(Event event); // called by EventListener::BroadcastEvent(event);

class EventListener:
void RegisterListener(Entity* listener, Event event);
void BroadcastEvent(Event event); // calls Entity::OnNotify(event) for all relative Entity instances

请注意,在 Entity::ReportEvent() 中调用 EventListener::RegisterListener(),而 EventListener::BroadcaseEvent() 调用 Entity::OnNotify()。做一个简单的前向声明是无法实现这种双链调用的。我应该怎么办?我可以在他们的 .hpp 文件中直接 #include 彼此吗(我非常怀疑)?

解决方案比我想象的要简单得多。您可以直接#include 与header 文件相互连接。请记住添加 header 守卫 (#ifndef ENTITY_HPP #define ENTITY_HPP #endif).