Maison > développement back-end > C++ > 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
Libérer: 2024-11-16 10:42:02
original
947 Les gens l'ont consulté

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.
Copier après la connexion

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() );
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal