Fonctions membres comme comparaison pour le tri
Lors de l'utilisation des fonctions membres comme critères de comparaison pour le tri, des erreurs de compilation peuvent survenir en raison de la restriction imposée par la norme ISO C. Cette norme interdit l’adressage direct d’une fonction membre non statique non qualifiée ou entre parenthèses pour dériver un pointeur vers une fonction membre. Une telle erreur peut être rencontrée lors de la tentative de tri d'un tableau au sein d'une classe.
Pour résoudre ce problème, une solution consiste à déclarer la fonction de comparaison doCompare comme statique. Cependant, si la fonction s'appuie sur les données de l'instance MyClass, une approche alternative consiste à transformer la classe en foncteur de comparaison. Cela implique de modifier doCompare pour implémenter la fonction Operator() et d'appeler std::sort comme suit :
doSort() { std::sort(arr,arr+someSize, *this); }
De plus, cela vaut la peine de considérer la valeur de retour manquante dans la méthode doSort. Pour une implémentation complète, cela devrait ressembler à :
int* doSort() { std::sort(arr,arr+someSize, &doCompare); return arr; }
Alternativement, on peut utiliser std::mem_fun et contraignant pour transformer la fonction membre en une fonction libre. Une autre option consiste à intégrer la fonction dans la classe, comme démontré dans l'extrait suivant :
class MyClass { struct Less { Less(const MyClass& c) : myClass(c) {} bool operator () ( const int & i1, const int & i2 ) {// use 'myClass'} MyClass& myClass; }; doSort() { std::sort(arr,arr+someSize, Less(*this)); } };
En sélectionnant l'une de ces approches, les développeurs peuvent gérer avec succès le tri d'un tableau au sein d'une classe à l'aide d'une fonction membre. comme critère de comparaison.
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!