Maison  >  Article  >  développement back-end  >  Puis-je utiliser des classes locales avec des algorithmes STL en C moderne ?

Puis-je utiliser des classes locales avec des algorithmes STL en C moderne ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-23 10:17:12496parcourir

Can I Use Local Classes with STL Algorithms in Modern C  ?

Exploiter les classes locales avec les algorithmes STL

En explorant la nature multiforme des algorithmes STL, vous pouvez vous interroger sur l'incapacité d'utiliser des classes définies localement comme prédicats au sein de ces algorithmes. Les origines de cette restriction se situent dans le cadre de la norme C 98/03.

Selon l'article 14.3.1 de la norme, des limitations s'appliquent aux types servant de paramètres de modèle. Parmi ces contraintes figure l'interdiction des types locaux, des types dépourvus de lien, des types sans nom ou des types dérivés de toute combinaison de ceux-ci.

template <class T> class Y { /* ... */ };
void func() {
      struct S { /* ... */ }; //local class
      Y< S > y1; // error: local type used as template-argument
      Y< S* > y2; // error: pointer to local type used as template-argument
}

Cette restriction, bien que non intentionnelle, a persisté en raison de la lenteur de l'évolution des normes. . Néanmoins, les compilateurs contemporains, adoptant les progrès des versions C ultérieures, autorisent désormais généralement l'utilisation de types locaux dans les algorithmes.

Exemple :

#include <vector>
#include <algorithm>

int main() {
   int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
   std::vector<int> v(array, array + 10);

   struct even : public std::unary_function<int, bool> {
      bool operator()(int x) { return !(x % 2); }
   };

   std::remove_if(v.begin(), v.end(), even()); // compiles successfully
   return 0;
}

Dans l'actuel Dans le paysage C, l'utilisation de types définis localement dans les algorithmes STL est devenue une pratique courante, tout comme l'introduction d'expressions lambda, améliorant encore davantage les algorithmes. flexibilité.

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