'reinterpret_cast' casten von Klassen
-
hier mal ein kleines beispiel, wie du es mit virtuellen methoden laufzeit-flexibel und gleichzeitig mit policies compilezeit-flexibel machen kannst:
#include <iostream> #include <string> using namespace std; class IDevice { public: virtual ~IDevice(){} virtual void printAPIName() = 0; }; template<typename T> class Device : public T, public IDevice { typedef T api_policy; public: void printAPIName() { cout << api_policy::getAPIName(); } }; class Direct3DPolicy { protected: string getAPIName() { return "Direct3D API Policy"; } }; class OpenGLPolicy { protected: string getAPIName() { return "OpenGL API Policy"; } }; int main() { int iSelection; IDevice *myDevice; cout << "[1]Direct3D\n[2]OpenGL\n"; cin >> iSelection; if (iSelection == 1) myDevice = new Device<Direct3DPolicy>; else if (iSelection == 2) myDevice = new Device<OpenGLPolicy>; else return 1; myDevice->printAPIName(); //IDevice hat einen virtuellen Destruktor, //denn nur so wird mit "delete einenIDeviceZeiger" auch der //dynamisch angeforderte Device<...> Speicher freigegeben. delete myDevice; }
-
Hi Lukas,
zu Deinem Code:
• lass das 'reinterpret_cast' weg, das ist an dieser Stelle sinnfrei und irreführend.
• der NullDriver sollte keine Implementierung für 'print' haben. Schau Dir mal pur virtuelle Funktionen an.
-
alles klar, danke noch mal an alle

-
LukasBanana schrieb:
Gute, Idee! Aber sind virtuelle Funktionen nicht etwas langsamer als normale?
Da sieht man mal was diese ganzen Pseudooptimierungsaussagen anrichten können.
-
Bei einem Spiel sind virtuelle Metthoden inakzeptabel.
-
asdfasdf schrieb:
Bei einem Spiel sind virtuelle Metthoden inakzeptabel.
So ein Mist. Bei einem Spiel hast du ganz andere Sorgen, als ein paar virtuelle Methoden.
-
LukasBanana schrieb:
Gute, Idee! Aber sind virtuelle Funktionen nicht etwas langsamer als normale?
Du bist nicht echt, oder?
-
asdfasdf schrieb:
Bei einem Spiel sind virtuelle Metthoden inakzeptabel.
Beim Programmieren ist ein Spiel inakzeptabel.
Jede Aussage ist gleichzeitig richtig und falsch, wenn man sie nur ausreichend verkürzt, pauschalisiert und komplett kontext- und Begründingsfrei präsentiert.
Gruß,
Simon2.
-
Bei einem Spiel sind virtuelle Metthoden inakzeptabel.
lol.. das erinnert mich als an HL2
wenn ich das zocke, kommt ganz selten mal eine error fenster mit der melden "Error: Pure Virtual Function call" 
-
Also dass virtuelle Funktionen bei Spielen inakzeptabel sein sollen würde mich aber schon sehr wundern

Bloß ich weiß nicht, ob sich die virtuellen Funktionen den FunktionsZeiger (auf welche Funktion zu welcher Unterklasse sie nun zeigen) nur beim ersten Mal holen müssen oder bei jedem Aufruf.
-
LukasBanana schrieb:
Bloß ich weiß nicht, ob sich die virtuellen Funktionen den FunktionsZeiger (auf welche Funktion zu welcher Unterklasse sie nun zeigen) nur beim ersten Mal holen müssen oder bei jedem Aufruf.
Prinzipiell jedes Mal. Wie stellst Du Dir das sonst vor?