problem bei globalem initialisieren
-
Hallo
ich habe wieder eine Frage, diesmal designtechnischer Natur. Ich habe eine DLL in der ich in diversen Klassen Funktionen habe und diese in einer Registerklasse registrieren möchte. Das sollte möglichst automatisch geschehen, funktioniert aber nicht, da vermutlich einige Objekte noch nicht intialisiert wurden. (Ich bekomme immer einen Zugriffsfehler)
Das Ganze ist so aufgebaut, dass ich probiert habe mithilfe dieses Templates
#define globalCtor(T) global_ctor<T> static##T; template<typename T> class extx global_ctor { public: global_ctor() { T::_init(); } //~global_ctor() { Class::_uninit(); } };die _ini() Funktion aufzurufen und darin dann die statische map der Registerklasse klasse gefüllt habe.
Registry::registerA["test"] = &gx::Test;An dieser Stelle gab es eine Zugriffsverletzung weil die Registry-Klasse vermutlich noch nicht erzeugt oder die Member im Speicher abgelegt waren.
Das Ganze soll für mehrere Klassen dienen, die sich bzw. ihre Member bei der
Registry anmelden sollen. Der manuelle aufruf bei Programmstart funktioniert übrigens, das heißt es liegt nicht an der Zuweisung an sich.Jemand eine Idee wie man das anders (aber prinzipiell gleich) lösen kann?
-
Könnte was damit zu tun haben:
http://www.parashift.com/c++-faq/static-init-order.htmlWie/wo/wann erzeugst du dieses "Register-Objekt?"