Maison > développement back-end > C++ > le corps du texte

Pourquoi n'y a-t-il pas de modèle « is_complete » dans Boost.TypeTraits ?

Linda Hamilton
Libérer: 2024-10-31 04:07:53
original
954 Les gens l'ont consulté

 Why is there no `is_complete` template in Boost.TypeTraits?

Modèle Is_Complete dans la bibliothèque Boost

En recherchant un modèle is_complete dans la bibliothèque Boost, il est devenu évident qu'un tel modèle n'existe pas dans Boost.TypeTraits. Cela soulève des questions sur la raison de son absence et sur la conception potentielle d'un tel modèle.

Considérez l'extrait de code suivant :

<code class="cpp">//! Check whether type complete
template<typename T>
struct is_complete
{   
  static const bool value = ( sizeof(T) > 0 );
};

...

// use it in such a way
BOOST_STATIC_ASSERT( boost::is_complete<T>::value );</code>
Copier après la connexion

Ce code est défectueux car il applique sizeof à un type incomplet. est illégal. Par conséquent, une solution alternative est recherchée.

Une approche possible implique l’utilisation de SFINAE. Cependant, cela pose une limitation car cela ne peut généralement pas résoudre le problème sans violer la règle de définition unique (ODR).

Une solution spécifique à la plateforme proposée par Alexey Malistov est disponible pour MSVC avec une légère modification :

<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;
    };
}
#define IS_COMPLETE(X) is_complete<X,__COUNTER__>::value</code>
Copier après la connexion

Malheureusement, l'utilisation de la macro __COUNTER__ n'est pas standardisée, ce qui limite potentiellement son applicabilité sur différents 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