Portál AbcLinuxu, 13. května 2025 23:16
Řešení dotazu:
std::map< int,int > staticClass::map1; // Tady se to inicializuje default construktorem
std::map< int,int* > staticClass::map2; // Take inicializace default constructorem
static const bool init = staticClass::createMaps(); // createMaps musi samozrejme pak vracet bool, idealne true
Proměnnou init je možné někam schovat, třeba jako private membera nějaké třídy nebo do anonymního namespace.
Pokud by se takto inicializovaly statické proměnné z template třídy a "dummy" init proměnná by byla také templatovaná, je potřeba dát si pozor na to, aby ta "dummy" proměnná init byla někde použita. Jinak ji překladač vyoptimalizuje a tudíž vyoptimalizuje i volání její inicializace.
Nejsem si jist, jestli poslední odstavec dotazu je otázka, jestli je pořadí inicializace zaručeno standardem. Každopádně tvrdím, že je, ovšem jenom v rámci jedné kompilační jednotky (tedy jeden zdroják obsahující všechny includované headery).
std::map< int,int > staticClass::map;
member of class, tak je třeba aby byla explicitně uvedena inicializace tedy std::map< int,int > staticClass::map1 = std::map< int,int >();
.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.