Je pense que le problème est assez commun. Vous avez une chaîne d'entrée et devez appeler une fonction en fonction du contenu de la chaîne. Quelque chose comme un commutateur() pour les chaînes. Pensez aux options de la ligne de commande.Vous cherchez le répartiteur de code le plus élégant
Actuellement, je suis en utilisant:
using std::string;
void Myclass::dispatch(string cmd, string args) {
if (cmd == "foo")
cmd_foo(args);
else if (cmd == "bar")
cmd_bar(args);
else if ...
...
else
cmd_default(args);
}
void Myclass::cmd_foo(string args) {
...
}
void Myclass::cmd_bar(string args) {
...
}
et dans l'en-tête
class Myclass {
void cmd_bar(string args);
void cmd_foo(string args);
}
Ainsi, chaque foo et bar, je dois répéter quatre (4!) Fois. Je sais que je peux alimenter les pointeurs et les chaînes de fonction en un tableau statique avant de faire le dispatching en boucle, en sauvegardant des lignes if ... else. Mais y a-t-il de la supercherie (ou abus de préprocesseur, selon le POV), qui permet de définir la fonction et de la mettre à jour automagiquement? Donc, je devrais l'écrire seulement deux fois, ou peut-être une fois si utilisé en ligne?
Je cherche une solution en C ou C++.
Cette question a été posée à plusieurs reprises, et j'ai répondu par moi ici http://stackoverflow.com/questions/659581/replace-giant-switch-statement-with-what –
Il demande également un plan d'enregistrement de quelque sorte à réduire l'effort dans la maintenance du dictionnaire. – djna
Il l'est, mais je ne pense pas qu'il y en ait un qui le satisferait. Vous pourriez faire quelque chose de grossier et laid avec des macros, mais c'est plus de problèmes que ça en vaut la peine. –