...ou comment appeler des méthodes par une string, au sein de la clasee.
Bonjour,
Est-il possible d'avoir dans la même classe un map de string vers des méthodes de la classe ?
La motivation: dans une classe Config, j'implémente une méthode read(), qui parse un fichier de config, et qui, pour chaque mot-clef, appelle une fonction parseConsume(key, val). Dans parseConsume(), je peux faire des else if (key == "clef1"), mais il me paraissait plus élégant de faire ParseMap::const_iterator iter = parseHandler.find(key), puis (*this.*(iter->second))(val) (ou approchant) où parseHandler serait initialisé dans le constructeur à base de:
parseHandle["key1"] = &key1Def;
et serait défini ainsi:
1 2 3 4 5 6 7 8 9
| typedef void (Config::* ParseFunc)(std::string);
typedef std::map<std::string, ParseFunc> ParseMap;
class Config
{
// ...
private:
ParseMap parseHandler;
// ... |
MAIS
au vu des erreurs du compilo, il semble que ce soit plus compliqué, voire impossible. J'ai cru comprendre qu'il faudrait éventuellement utiliser un delegate. Mais bon si on en arrive là, je préfère rester avec mes else if.
Qu'en pensez-vous ?
Partager