#pragma once template class Listener { protected: template bool isType(EventType * event) { return cast(event); } template T * cast(EventType * event) { return dynamic_cast(event); } public: virtual bool wantsEvent(EventType *) { return true; } virtual void accept(EventType *) {} };