#ifndef EVENT_HANDLER_H #define EVENT_HANDLER_H #include #include "EventHandlerBase.h" #include "EventManager.h" template class EventHandler: public EventHandlerBase { public: void registerForEvent() { EventManager::getInstance()->registerEventHandler(this); } void unregisterForEvent() { EventManager::getInstance()->unregisterEventHandler(this); } void handleBaseEvent(std::shared_ptr event) override { std::shared_ptr specificEvent = std::dynamic_pointer_cast(event); if (specificEvent) { handleEvent(specificEvent); } } private: virtual void handleEvent(std::shared_ptr event) = 0; }; template class CombinedEventHandlerHelper { protected: void registerForEventsHelper() {} void unregisterForEventsHelper() {} }; template class CombinedEventHandlerHelper : public EventHandler , public CombinedEventHandlerHelper { protected: void registerForEventsHelper() { EventHandler::registerForEvent(); CombinedEventHandlerHelper::registerForEventsHelper(); } void unregisterForEventsHelper() { EventHandler::unregisterForEvent(); CombinedEventHandlerHelper::unregisterForEventsHelper(); } }; template class CombinedEventHandler: public CombinedEventHandlerHelper { protected: void registerForEvents() { CombinedEventHandlerHelper::registerForEventsHelper(); } void unregisterForEvents() { CombinedEventHandlerHelper::unregisterForEventsHelper(); } }; #endif // EVENT_HANDLER_H