Maison  >  Article  >  développement back-end  >  Les classes locales peuvent-elles être utilisées comme arguments de modèle dans les algorithmes STL ?

Les classes locales peuvent-elles être utilisées comme arguments de modèle dans les algorithmes STL ?

DDD
DDDoriginal
2024-11-16 10:42:02838parcourir

Can Local Classes Be Used as Template Arguments in STL Algorithms?

Utilisation de classes définies localement avec des algorithmes STL

En programmation, il est souvent souhaitable d'utiliser des classes définies localement comme prédicats pour les algorithmes STL. Malheureusement, la norme C 98/03 interdit explicitement cette pratique en précisant que :

A local type, a type with no linkage, an unnamed type or a type compounded from any of these types shall not be used as a template-argument for a template type-parameter.

Cette restriction est énoncée à l'article 14.3.1 de la norme C.

Initialement, cette restriction était considéré comme une erreur par de nombreux programmeurs et aurait été corrigé plus tôt si la norme avait évolué plus rapidement. Cependant, C 11 a supprimé cette restriction, permettant d'utiliser des types locaux comme arguments de modèle.

Par exemple, le code suivant, qui était auparavant invalide dans C 98/03, est désormais autorisé dans C 11 :

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() );
}

La plupart des compilateurs modernes autorisent l'utilisation de classes locales comme arguments de modèle, tout en prenant en charge les expressions lambda.

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