Maison >développement back-end >C++ >Comment initialiser correctement les membres de classe statiques dans les modèles de classe C ?

Comment initialiser correctement les membres de classe statiques dans les modèles de classe C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-09 12:38:17630parcourir

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

Définition de membres de classe statiques dans des modèles de classe

En C, les données membres statiques dans les modèles de classe ne peuvent pas être initialisées directement lorsqu'elles sont définies dans la déclaration de classe. Lorsqu'il s'agit de types non intégraux, cette limitation pose un défi.

Considérez le code suivant :

template <typename T>
struct S
{
    ...
    static double something_relevant = 1.5;
};

Ce code ne peut pas être compilé car Something_relevant n'est pas un type intégral. Cependant, la solution réside dans la définition du membre en dehors de la déclaration de classe.

template <typename T>
struct S
{
    static double something_relevant;
};

template <typename T>
double S<T>::something_relevant = 1.5;

Dans cette approche, le membre statique est d'abord déclaré dans la définition de classe. Ensuite, la définition est fournie en dehors de la classe, après la déclaration du modèle. Cette approche garantit que le membre statique est défini une fois dans toutes les instanciations du modèle S.

Le compilateur gérera le processus de définition. Lorsqu'il rencontrera la déclaration de membre dans la classe, il reconnaîtra qu'elle fait partie d'un modèle. Lorsqu'il rencontre la définition en dehors de la classe, le compilateur remplacera le paramètre de modèle T par le type réel utilisé dans l'instanciation. Cela garantit que chaque instanciation du modèle S possède sa propre copie du membre statique Something_relevant.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn