Maison  >  Article  >  développement back-end  >  Pouvez-vous forcer l’initialisation des membres statiques dans les classes de modèles sans instanciation ?

Pouvez-vous forcer l’initialisation des membres statiques dans les classes de modèles sans instanciation ?

DDD
DDDoriginal
2024-11-01 15:37:30164parcourir

Can You Force Initialization of Static Members in Template Classes Without Instantiation?

Comment initialiser explicitement des membres statiques

Question :

En C, les membres statiques de une classe de modèle n'est initialisée que lorsqu'elle est explicitement utilisée dans une instanciation concrète. Existe-t-il un moyen de forcer leur initialisation sans créer d'instance ni demander à l'utilisateur de spécifier directement le membre ?

Réponse :

Oui, il est possible de forcer l'initialisation initialisation d'un membre statique en employant l'une des techniques suivantes :

Utilisation d'un type Wrapper :

<code class="cpp">template<typename T, T> struct value { };

template<typename T>
struct HasStatics {
  static int a; // we force this to be initialized
  typedef value<int&amp;, a> value_user;
};

template<typename T>
int HasStatics<T>::a = /* whatever side-effect you want */ 0;</code>

Utilisation d'une astuce syntaxique :

<code class="cpp">template<typename T, T> struct var { enum { value }; };
typedef char user;

template<typename T>
struct HasStatics {
  static int a; // we force this to be initialized
  static int b; // and this

  // hope you like the syntax!
  user :var<int&amp;, a>::value,
       :var<int&amp;, b>::value;
};

template<typename T>
int HasStatics<T>::a = /* whatever side-effect you want */ 0;

template<typename T>
int HasStatics<T>::b = /* whatever side-effect you want */ 0;</code>

Les deux techniques forcent l'initialisation des membres statiques en introduisant une dépendance qui déclenche l'évaluation de la définition du membre. Notez que la deuxième technique implique une syntaxe non conventionnelle et peut ne pas convenir à tous les cas.

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