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; };
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;
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!