Heim >Backend-Entwicklung >C++ >Wie werden statische Klassenmitglieder in C-Klassenvorlagen ordnungsgemäß initialisiert?
In C können statische Datenmitglieder in Klassenvorlagen nicht direkt initialisiert werden, wenn sie in der Klassendeklaration definiert werden. Beim Umgang mit nicht-integralen Typen stellt diese Einschränkung eine Herausforderung dar.
Bedenken Sie den folgenden Code:
template <typename T> struct S { ... static double something_relevant = 1.5; };
Dieser Code kann nicht kompiliert werden, da Something_relevant kein integraler Typ ist. Die Lösung liegt jedoch darin, das Mitglied außerhalb der Klassendeklaration zu definieren.
template <typename T> struct S { static double something_relevant; }; template <typename T> double S<T>::something_relevant = 1.5;
Bei diesem Ansatz wird das statische Mitglied zunächst innerhalb der Klassendefinition deklariert. Anschließend wird die Definition außerhalb der Klasse nach der Vorlagendeklaration bereitgestellt. Dieser Ansatz stellt sicher, dass das statische Mitglied in allen Instanziierungen der S-Vorlage einmal definiert wird.
Der Compiler übernimmt den Definitionsprozess. Wenn die Member-Deklaration innerhalb der Klasse gefunden wird, erkennt sie, dass sie Teil einer Vorlage ist. Wenn die Definition außerhalb der Klasse gefunden wird, ersetzt der Compiler den Vorlagenparameter T durch den tatsächlichen Typ, der in der Instanziierung verwendet wird. Dadurch wird sichergestellt, dass jede Instanziierung des S-Templates über eine eigene Kopie des statischen Members Something_relevant.
verfügtDas obige ist der detaillierte Inhalt vonWie werden statische Klassenmitglieder in C-Klassenvorlagen ordnungsgemäß initialisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!