Maison > développement back-end > C++ > Pouvez-vous spécialiser chaque modèle dans l'espace de noms « std » ? Limitations et allocations dans les spécialisations explicites

Pouvez-vous spécialiser chaque modèle dans l'espace de noms « std » ? Limitations et allocations dans les spécialisations explicites

Mary-Kate Olsen
Libérer: 2024-10-28 17:12:30
original
1001 Les gens l'ont consulté

 Can You Specialize Every Template in the `std` Namespace?  Limitations and Allowances in Explicit Specializations

Spécialisations explicites dans l'espace de noms std : limitations et autorisations

Bien que les utilisateurs aient la possibilité d'ajouter des spécialisations explicites à l'espace de noms std, certaines les modèles sont explicitement exclus de cette pratique.

Spécialisations interdites

Selon la norme, les modèles suivants ne peuvent pas être spécialisés :

  • numeric_limits pour les types standards non arithmétiques comme complexe
  • shared_ptr, à moins qu'ils ne répondent à des critères spécifiques de copiabilité, d'assignabilité et de comparabilité
  • weak_ptr, à moins qu'ils ne soient copiables et assignables
  • std::hash, sauf si les spécialisations respectent les exigences de son modèle
  • Modèles de classe définis dans (sauf common_type)
  • Locales, qui nécessitent des spécialisations spécifiques
  • istreambuf_iterator, qui doit avoir un constructeur de copie trivial, un constructeur par défaut et un destructeur
  • complexe pour les types autres que float, double, ou long double
  • atomique, sauf si les spécialisations suivent des contraintes spécifiques telles que la suppression des constructeurs de copie et des constructeurs de valeur
  • unary_function et binaire_function, qui sont obsolètes et ne peuvent pas être spécialisés

Considérations générales

En plus de ces interdictions spécifiques, la norme fournit des directives générales pour l'ajout à l'espace de noms std :

  • Déclarations ou définitions à std ou ses sous-espaces de noms ne doivent pas être ajoutés sauf indication contraire explicite.
  • Les spécialisations de modèles ne sont autorisées que si elles dépendent d'un type défini par l'utilisateur et répondent aux exigences de la bibliothèque.
  • Spécialisations de fonctions membres pour la bibliothèque standard les classes, les modèles de fonctions membres et les modèles de classes membres sont interdits.
  • Les instanciations de modèles explicites ne sont autorisées que si elles dépendent d'un type défini par l'utilisateur et répondent aux exigences de la bibliothèque.

En adhérant Grâce à ces limitations, les développeurs peuvent garantir que leurs spécialisations n'entrent pas en conflit avec l'intégrité et l'opérabilité de la bibliothèque standard dans l'espace de noms std.

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