Navigation
Artikel
Stuff
RSS Feeds
|
Tutorials - Templatisierte Listener - oder: fucking call it!Sprachenübersicht/Programmierung/C / C++/ C#/Metaprogrammierung Keywords: template listener, C++ Das Problem: Top
Code: template<class T> struct PacketListener { virtual void processPacket( T* packet ); }
Lösung: Top
Code: template<class T> class NetworkListenerBase { public: virtual void onPacket( T* packet ) = 0; }; class NetworkListenerHelper { public: virtual void callListener( Packet* p ) = 0; }; template<class T> class NetworkListener: public NetworkListenerBase<T>, public NetworkListenerHelper { void callListener( Packet* p ) { this->onPacket( (T*) p->data ); } };
Code: class NetworkManager { private: std::map<unsigned int, NetworkListenerHelper*> listener; public: template<class T> void addListener( T* listener ) { this->listener[T::packetId] = static_cast<NetworkListenerHelper*> listener; } void dispatchPacket( const unsigned char& id, Packet* packet ) { if( listener.find(id) != listener.end() ) { listener[id]->callListener( packet ); } } };
Gibt es noch irgendwelche Fragen, oder wollen Sie über den Artikel diskutieren? Sprachenübersicht/Programmierung/C / C++/ C#/Metaprogrammierung/Templatisierte Listener - oder: fucking call it! |