...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:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
parseHandle["key1"] = &key1Def;
et serait défini ainsi:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?