rendered paste body#include <iostream>template <class T>class SubSys { public: virtual void Handle(T*) { std::cout << "Event recieved but not handled." << std::endl; };};class Event { public: virtual void dispatch() = 0;};template <class T>class BaseEvent : public Event{ public: void addListener(SubSys<T>* ss_ptr) { ssptr = ss_ptr; }; virtual void dispatch() { ssptr->Handle(dynamic_cast<T*>(this)); } static SubSys<T>* ssptr;};template <class T>SubSys<T>* BaseEvent<T>::ssptr;/*------------------------------------*/class SubEvent : public BaseEvent<SubEvent> {};class StupidEvent : public BaseEvent<StupidEvent> {};class SubSystem : public SubSys<SubEvent>, public SubSys<StupidEvent> { public: void Handle(SubEvent* e) { std::cout << " Got a subevent" << std::endl; } void Handle(StupidEvent* e) { std::cout << " Got a stupidevent" << std::endl; }};int main() { StupidEvent* a = new StupidEvent; SubEvent* b = new SubEvent; SubSystem *ss = new SubSystem; b->addListener(ss); a->addListener(ss); delete b; delete a; Event* d = new StupidEvent; Event* c = new SubEvent; c->dispatch(); d->dispatch(); return 0;};