C++ 在事件侦听器模式中包含问题
C++ Include Problem in Event Listener Pattern
我正在尝试在我的项目中使用 EventListener 模式(而不是 Observer)。基本上:
Entity
s 可以将自己注册为某些类型的 Event
s 的听众
Entity
可以向 EventListener
报告 Event
。
- 当报告
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
).
我正在尝试在我的项目中使用 EventListener 模式(而不是 Observer)。基本上:
Entity
s 可以将自己注册为某些类型的Event
s 的听众
Entity
可以向EventListener
报告Event
。- 当报告
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
).