Maison >développement back-end >C++ >Puis-je utiliser des classes locales comme prédicats dans les algorithmes STL ?

Puis-je utiliser des classes locales comme prédicats dans les algorithmes STL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-16 10:58:03558parcourir

Can I Use Local Classes as Predicates in STL Algorithms?

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!

Déclaration:
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