Salut !
Pour que ça compile, il faut préciser dans la déclaration du type que c'est un pointeur sur une fonction membre de CList:
typedef bool(CList::*FnCmp)(int, int);
Comme Loulou24 l'a indiqué, ça n'a rien à voir avec une fonction "libre", ou avec une fonction statique de la classe CList. Mais d'ailleurs, dans ton cas est-ce que ces fonctions de comparaisons ne devraient pas être statiques (si elles ne font que comparer les entiers en parametre) ?
Enfin, je rejoins encore Loulou pour dire que "les foncteurs, c'est bien" 
Donc tu pourrais recoder tout ça avec ta propre gestion de foncteurs, mais aussi utiliser (de manière transparente ou non) std::list. Pour que ca soit transparent, tu peux définir toi même les foncteurs, et proposer une méthode Sort avec en paramètre le champ à trier. Sinon tu peux laisser à l'utilisateur le soin de définir son propre foncteur quand il appelera ta méthode de tri (pas transparent du tout, mais moins galère pour toi).
Par exemple pour le cas 1 (on peut faire mieux, et plus évolutif, mais c'est surtout pour illustrer):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
class CList
{
enum EAttrib
{
Id,
Libelle,
Couleur
};
public:
void Sort(bool _bReverse, EAttrib _attribute)
{
// appelle m_Liste.sort() avec le foncteur approprié
// tu peux surement gérer ça bien mieux qu'avec une serie de "if"
}
protected:
std::list<Truc> m_Liste;
// définition de tous tes foncteurs ...
}; |
Partager