004
01.04.2011, 14:00 Uhr
0xdeadbeef
Gott (Operator)
|
Vorsicht, Initialisierungsreihenfolge!
Du wirst die Factory in einer Funktion zur Verfügung stellen müssen, damit sie auf jeden Fall vor den register_type-Aufrufen existiert:
C++: |
factory<std::string, A> &get_factory() { static factory<std::string, A> self; return self; }
...
int const reg_B = (get_factory().register_type<B>("Typ B"), 0);
|
wäre denkbar.
Ansonsten - wenn es um eine Plugin-Architektur geht und das ganze zur Laufzeit per dlopen/dlsym o.ä. rangelinkt wird, könntest du natürlich auch beim Laden des betreffenden Plugins einen Funktionszeiger in eine Map speichern, der dir Objekte des gewollten Typs erstellt. Damit könnte man sich einiges Linkergefummel wahrscheinlich sparen. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 01.04.2011 um 14:02 Uhr von 0xdeadbeef editiert. |