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):
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
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; ... }
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... } } };
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!
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 qStableSort (v.begin(),v.end,Sorter(sorttype));
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?
![]()
Partager