Warum werden statische Vorlagenfelder nur initialisiert, wenn sie verwendet werden? [Duplikat]
Mögliche Duplikate:
(statische Initialisierung / Vorlageninstanziierung) Probleme mit dem Factory-Muster
versucht, die statische Objektinitialisierung zu erzwingen
https://stackoverflow.com/a/2852234/673730
Nehmen wir die folgende Klasse an:
<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>
Ich hätte das angenommen, wenn ich mich spezialisiert hätteA
das statische Feldx
würde initialisiert werden. Folgendes jedoch:
<code>A<int> a; //no output </code>
führt nicht zu einem Anruf anfoo
. Wenn ich versuche, auf das Mitglied zuzugreifen, ist das Verhalten wie erwartet:
<code>A<int> a; bool b = a.x; //output: here </code>
BEARBEITEN:Wie kann ich das sicherstellen?A::x
wird initialisiert, ohne darauf zuzugreifen?