Bonjour,
Mon but est de créer une classe Interpreter qui gère l'interprétation d'un message sous forme de chaine de caractère : KEYWORD1 param1.1 param1.2 ... KEYWORD2 param2.1 param2.2 ...
Pour ce faire, je commence par initialiser une std::map en associant un pointeur vers une fonction de traitement membre à un mot clef.
Mes fonctions de traitement sont toutes construites sur le même modèle :
bool myFunction(std::vector<std::string> params).
J'ai enfin une fonction readMessage(const std::string& keyword,std::vector<std::string>) qui lancera la bonne fonction de traitement en fonction du mot clef.
D'autres fonctions gèrent le découpage de la chaine en entrée mais là n'est pas le problème.
En fait le compilo me jète lorsque je remplis ma map en me disant que je ne peux pas referencer une fonction membre liée :
error C2276: '&': opération non conforme sur l'expression d'une fonction membre liée.
Voilà mon code :
Si quelqu'un a une idée ? Merci d'avance
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 typedef bool (*read_func)(std::vector<std::string>); class Interpreter { private: std::map<std::string,read_func> funcTab; public: void init(); bool readMessage(const std::string& keyword, std::vector<std::string> params); bool readFunc1(std::vector<std::string> params); bool readFunc2(std::vector<std::string> params); //... }; void Interpreter::init() { funcTab["KEY1"] = &readFunc1; funcTab["KEY2"] = &readFunc2; //... } bool Interpreter::readMessage(const std::string& keyword,std::vector<std::string> params) { std::map<std::string,read_func>::const_iterator element = funcTab.find(keyword); if (element == funcTab.end()) return false; else return (iter->second)(params); }
Partager