Maison  >  Article  >  développement back-end  >  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
Patricia Arquetteoriginal
2024-10-30 17:15:03426parcourir

 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>

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>

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!

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