Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include <map>
- #include <functional>
- template<typename EventType>
- class IEventDispatcher
- {
- public:
- using EventHandler = std::function<void()>;
- virtual void addEventListener(EventType eventToAdd, EventHandler handler) = 0;
- virtual void removeEventListener(EventType eventToRemove) = 0;
- virtual void dispatch(EventType eventToDispatch) = 0;
- };
- #pragma once
- #include "IEventDispatcher.h"
- template<typename EventType>
- class EventDispatcher : public IEventDispatcher<EventType>
- {
- public:
- using EventHandler = std::function<void()>;
- EventDispatcher();
- ~EventDispatcher();
- void addEventListener(EventType eventToAdd, EventHandler handler);
- void removeEventListener(EventType eventToRemove);
- void dispatch(EventType eventToDispatch);
- private:
- std::multimap<EventType, EventHandler> eventListeners;
- };
- template<typename EventType>
- EventDispatcher<EventType>::EventDispatcher()
- {}
- template<typename EventType>
- EventDispatcher<EventType>::~EventDispatcher()
- {}
- template<typename EventType>
- void EventDispatcher<EventType>::addEventListener(EventType eventToAdd, EventHandler handler)
- {
- eventListeners.emplace(eventToAdd, handler);
- }
- template<typename EventType>
- void EventDispatcher<EventType>::removeEventListener(EventType eventToRemove)
- {
- eventListeners.erase(eventToRemove);
- }
- template<typename EventType>
- void EventDispatcher<EventType>::dispatch(EventType eventToDispatch)
- {
- for (const auto &[event, handler] : eventListeners)
- {
- if (event == eventToDispatch)
- {
- handler();
- }
- }
- }
Add Comment
Please, Sign In to add comment