// Example program
#include <iostream>
#include <string>
#include <vector>
#include <exception>
// event types
class Event {
public: virtual ~Event() {} //Need this so Event is a polymorphic class
};
class AlarmEvent : public Event {};
class ScoheEvent : public Event {};
// event handler
class EventHandler {
public:
virtual void HandleEvent(const Event &event);
};
void EventHandler::HandleEvent(const Event &event){
std::cout << "Handle event " << std::endl;
}
// alarm event handler
class AlarmEventHandler : public EventHandler {
public:
void HandleEvent(const Event &event);
void HandleEvent(const AlarmEvent &event);
};
void AlarmEventHandler::HandleEvent(const Event &event){
try {
HandleEvent(dynamic_cast<const AlarmEvent&>(event));
} catch(const std::exception& e) {
std::cout << "I can't handle things that aren't AlarmEvents!" << std::endl;
}
}
void AlarmEventHandler::HandleEvent(const AlarmEvent &event){
std::cout << "Handle alarm event " << std::endl;
}
// event emitter
class Emitter {
public:
std::vector<EventHandler*> handlers;
void Emit(Event &event);
};
void Emitter::Emit(Event &event){
for(size_t i = 0; i < this->handlers.size(); i++){
this->handlers[i]->HandleEvent(event);
}
}
int main()
{
AlarmEventHandler handler;
AlarmEvent event;
Emitter emitter;
emitter.handlers.push_back(&handler);
emitter.Emit(event);
ScoheEvent scohe;
emitter.Emit(scohe);
}