Pour le problème de base ayant provoqué la question, je crois que je commencerais déjà par essayer de voir s'il n'y a vraiment pas moyen d'abandonner les chaines de caractères au profit de valeurs numériques et cela pour les deux raisons classiques qui sont
- le gain de performances (ou plutot la perte de performance qu'occasion la comparaison entre chaines de caractères
) - la possibilité d'utiliser le test à choix multiple, rendant de facto le goto inutile

S'il n'y a vraiment pas moyen d'éviter la comparaison de chaines de caractères, je me demande si je ne m'orienterais pas carrément vers une map dont la clé serait la chaine de caractères et la valeur un pointeur de fonction (ou mieux: un pointeur sur foncteur

) appelant les fonctions nécessaires, permettant d'avoir un code proche de
1 2 3
| std::map<std::string, Functor *>::const_iterator it = lamap.find(lachaine);
if( it!= lamap.end())
it->second(); |
Cela aurait, en plus, l'avantage d'éviter de comparer la chaine à rechercher avec l'ensemble des chaines existantes, l'alogrithme de recherche dans une map étant dichotomique

Partager