Maison > développement back-end > C++ > Comment puis-je conserver les membres de classe statiques (y compris les types non intégraux) dans les modèles de classe C ?

Comment puis-je conserver les membres de classe statiques (y compris les types non intégraux) dans les modèles de classe C ?

Susan Sarandon
Libérer: 2024-12-10 08:46:13
original
810 Les gens l'ont consulté

How Can I Preserve Static Class Members (Including Non-Integral Types) in C   Class Templates?

Préserver les membres de classe statiques dans les modèles de classe

Dans le domaine du C, vous pourriez rencontrer un scénario dans lequel vous souhaitez définir un membre de données statique pour une classe modèle, mais les types de données non intégraux posent un défi. Cet article présente une solution qui vous permet de déclarer des membres statiques quel que soit leur type tout en garantissant leur existence dans le code compilé.

Considérez l'extrait de code suivant :

template <typename T>
struct S {
    ...
    static double something_relevant = 1.5;
};
Copier après la connexion

Comme vous J'ai remarqué que le compilateur génère une erreur car Something_relevant n'est pas un type de données intégral. Le problème vient du fait que les modèles sont instanciés lorsqu'ils sont utilisés, et comme S est un modèle, vous ne pouvez pas définir ses membres dans un fichier compilé.

Pour surmonter cet obstacle, vous pouvez recourir à la définition du membre statique dans le fichier d'en-tête lui-même, comme démontré ci-dessous :

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

template <typename T>
double S<T>::something_relevant = 1.5;
Copier après la connexion

En définissant le membre statique dans le fichier d'en-tête, vous garantissez sa définition hors classe et évitez toute erreur de compilation. De plus, comme il est inclus dans le modèle, le compilateur gérera toutes les définitions multiples potentielles, garantissant ainsi une instanciation propre. Cette technique permet de conserver les membres statiques au sein des modèles de classe, quel que soit leur type de données, et garantit qu'ils seront présents dans le code compilé final.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal