All pastes #98964 Raw Edit

Klowner

public cpp v1 · immutable
#98964 ·published 2006-07-24 22:50 UTC
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;};