Maison > développement back-end > C++ > Comment déterminer l'exhaustivité du type en C sans modèle universel ?

Comment déterminer l'exhaustivité du type en C sans modèle universel ?

Patricia Arquette
Libérer: 2024-10-30 17:15:03
original
513 Les gens l'ont consulté

 How to Determine Type Completeness in C   without a Universal Template?

Détermination de l'exhaustivité d'un type avec un modèle personnalisé

Les types incomplets, bien qu'ils ne soient pas entièrement définis, jouent un rôle crucial dans la programmation C. Cependant, déterminer si un type est complet peut être difficile, en particulier en l'absence d'un modèle dédié comme is_complete de Boost.

Solution proposée

Bien qu'il s'agisse d'une solution universelle qui pleinement adhère à la règle de définition unique (ODR) peut être insaisissable, une approche spécifique à la plate-forme s'est avérée efficace pour Microsoft Visual C. Comme indiqué par Alexey Malistov, le modèle suivant peut être utilisé :

<code class="cpp">namespace
{
    template<class T, int discriminator>
    struct is_complete {  
      static T &amp; getT();   
      static char (&amp; pass(T))[2]; 
      static char pass(...);   
      static const bool value = sizeof(pass(getT()))==2;
    };
}</code>
Copier après la connexion

Utilisation

Pour exploiter ce modèle, utilisez simplement la macro IS_COMPLETE(X), où X est le type en question. Par exemple :

<code class="cpp">#define IS_COMPLETE(X) is_complete<X,__COUNTER__>::value</code>
Copier après la connexion

Mise en garde

Il est crucial de noter que la macro __COUNTER__ ne fait pas partie du standard C. Par conséquent, cette solution peut ne pas convenir à tous les compilateurs.

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