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!