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

Pouvez-vous spécialiser chaque modèle dans l'espace de noms « std » ?

Barbara Streisand
Libérer: 2024-10-29 12:45:29
original
274 Les gens l'ont consulté

 Can You Specialize Every Template in the `std` Namespace?

Modèles spécialisés dans l'espace de noms std

Les utilisateurs peuvent ajouter des spécialisations explicites à l'espace de noms std, mais certains modèles sont interdits. Ces restrictions garantissent que le comportement de la bibliothèque standard reste cohérent et bien défini.

Spécialisations interdites :

Selon le standard C, les modèles suivants ne peuvent pas être spécialisés :

  • numeric_limits : Interdit pour les types standards non arithmétiques (par exemple, complexe).
  • shared_ptr : Les spécialisations doivent être CopyConstructible, CopyAssignable, LessThanComparable et convertible en bool.
  • weak_ptr : Les spécialisations doivent être CopyConstructible et CopyAssignable.
  • hash : Les spécialisations doivent répondre les exigences du hachage du modèle de classe.
  • Modèles de classe dans  : Le comportement du programme n'est pas défini si des spécialisations sont ajoutées pour ces modèles.
  • Complexe : Non défini pour les types autres que float, double ou long double.
  • Atomic : Les spécialisations doivent avoir un constructeur de copie supprimé, un opérateur d'affectation de copie et un constructeur de valeur constexpr.
  • Fonction_unaire et fonction_binaire :Obsolètes et ne doivent pas être spécialisées.

Restrictions supplémentaires :

De plus, la norme interdit le suivant :

  • Ajout de déclarations ou de définitions à l'espace de noms std ou à tout sous-espace de noms sans répondre à des exigences spécifiques.
  • Spécialisation explicite des fonctions membres ou des modèles membres des classes de bibliothèque standard.
  • Spécialisation explicite ou partielle des modèles de classes membres des classes de bibliothèque standard.

Spécialisations autorisées :

Les spécialisations de modèles ne sont autorisées que si :

  • Ils dépendent d'un type défini par l'utilisateur.
  • Ils respectent les exigences de la bibliothèque standard pour le modèle d'origine.
  • Ils ne sont pas explicitement interdits comme indiqué ci-dessus.

En suivant ces restrictions, les programmeurs peuvent garantir l'intégrité et la prévisibilité de l'espace de noms std et de la bibliothèque standard dans son ensemble.

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