Heim >Backend-Entwicklung >C++ >Wie werden statische Klassenmitglieder in C-Klassenvorlagen ordnungsgemäß initialisiert?

Wie werden statische Klassenmitglieder in C-Klassenvorlagen ordnungsgemäß initialisiert?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-09 12:38:17622Durchsuche

How to Properly Initialize Static Class Members in C   Class Templates?

Statische Klassenmitglieder in Klassenvorlagen definieren

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ügt

Das 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn