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