Bonjour suite � cette discutions :
http://www.developpez.net/forums/d79...lacant-switch/
je cr�� ce poste pour avoir vos avis. Mon probl�me est assez simple. J'ai une structure compos�e de int et string. Je dois pouvoir trier un vecteur en fonction de n'importe quels membres. Un point important, c'est un vecteur utilis� pour de l'ihm et qui sera tri� de temps en temps par l'utilisateur. Voulant optimiser un minimum, ma premi�re version est tr�s lourde � relire et donc autant plus complexe � maintenir (d'o� mon poste au d�part):

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
switch(m_sortFlag)
    {
        case DESCENDINGORDER | IDMAILBOX:
            qStableSort 
                    (
                        m_internal.begin(),
                        m_internal.end(),
                        std::binary_negate<compareIdMailBox>(compareIdMailBox()) 
                    );
 
            break;
        case ASCENDINGORDER | IDMAILBOX:
            qStableSort 
                    (
                        m_internal.begin(),
                        m_internal.end(),
                        compareIdMailBox() 
                    );
 
            break;
 
        case DESCENDINGORDER | IDEMAIL:
           qStableSort 
                    (
                        m_internal.begin(),
                        m_internal.end(),
                        std::binary_negate<compareIdEmail>(compareIdEmail()) 
                    ); 
            break;
        case  ASCENDINGORDER | IDEMAIL:
           qStableSort 
                    (
                        m_internal.begin(),
                        m_internal.end(),
                        compareIdEmail() 
                    ); 
            break;
...
}
fcharton m'as propos� une solution, que je trouve bien plus pertinente par rapport � mon probl�me. Un simple pr�dicat avec un param�tre dans le constructeur qui contiendra le switch.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
 
class Sorter {
private:
  int SortType;
public:
  Sorter(int st) : SortType(st) {}
  bool operator()(type &t1,type &t2) { 
    switch SortType {
       case ... : return...
    }
  }
};


Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
 
qStableSort (v.begin(),v.end,Sorter(sorttype));
Compar�au code de d�part, ce trie sera moins rapide, car le switch sera pr�sent � chaque it�ration, mais faux probl�me, car le trie d�pend du temps "humain" et donc bien assez rapide pour une iHM et donc un humain. Et surtout, la lisibilit� du code et sa maintenance y gagne consid�rable!
Comme il est toujours int�ressant de confronter les id�es,

�tes vous d'accord avec ce raisonnement? ou trouvez vous cela absurde?
Ou
Dans quelle mesure le C++ moderne peut rend la maintenance plus facile?