Dlaczego nie są inicjowane statyczne pola szablonów, jeśli nie są używane? [duplikować]
Możliwy duplikat:
(statyczne inicjowanie / tworzenie instancji szablonu) problemy ze wzorem fabryki
próba wymuszenia inicjalizacji obiektu statycznego
https://stackoverflow.com/a/2852234/673730
Załóż następującą klasę:
<code>template<class X> struct A { static bool x; static bool foo() { cout << "here"; return true; } }; template<class X> bool A<X>::x = A<X>::foo(); </code>
Przyjąłem to, gdy się specjalizujęA
, pole statycznex
zostanie zainicjowany. Jednak następujące:
<code>A<int> a; //no output </code>
nie powoduje połączenia dofoo
. Jeśli spróbuję uzyskać dostęp do członka, zachowanie jest zgodne z oczekiwaniami:
<code>A<int> a; bool b = a.x; //output: here </code>
EDYTOWAĆ:Jak mogę się upewnićA::x
jest inicjowany bez dostępu do niego?