Classes locales dans les algorithmes STL
Dans le domaine de la programmation C, la bibliothèque de modèles standard (STL) propose un ensemble complet d'algorithmes pour manipuler des structures de données. Cependant, une question courante se pose concernant l'utilisation de classes définies localement comme prédicats dans les algorithmes STL.
L'interdiction dans les normes pré-C 11
Historiquement, le C 98 Les normes /03 interdisaient explicitement l'utilisation de types locaux comme arguments de modèle pour les algorithmes STL. Cette restriction s'étendait aux classes locales. Par exemple :
struct even : public std::unary_function<int,bool> { bool operator()(int x) { return !(x % 2); } }; std::remove_if(v.begin(), v.end(), even()); // error
Selon la norme, « Un type local, un type sans lien, un type sans nom ou un type composé de l'un de ces types ne doit pas être utilisé comme argument de modèle pour un paramètre de type de modèle."
La justification de la restriction
La justification initiale de cette restriction n'est pas claire. Cela peut être dû à une ambiguïté potentielle ou à des limitations techniques liées à l'implémentation de modèles de métaprogrammation dans les premières versions du langage.
La relaxation en C 11
Heureusement, le La norme C 11 a supprimé cette restriction, permettant aux développeurs d'utiliser des classes locales comme arguments de modèle. Ce changement a considérablement amélioré l'expressivité et la flexibilité des algorithmes STL.
La solution en pratique
En pratique, la plupart des compilateurs modernes prennent désormais en charge l'utilisation de classes locales avec des algorithmes STL. , même si la norme linguistique sous-jacente ne le permet pas explicitement. Cependant, il est important de vérifier la documentation du compilateur spécifique utilisé pour garantir la compatibilité.
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!