Salut tout le monde,
Je viens de récupérer un code c++ et comme je suis débutant en ce domaine j'ai une question a vous poser. Je n'arrive tout simplement pas a comprendre ce bout de code. J'ai tenté de me renseigner auparavant mais les recherches ont été infructueuses.
MyClass.h
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 class MyClass; typedef void(MyClass::*Fonction)(); class MyClass : public OtherClass { ... std::map<std::string, Fonction> functionFormat; ... public: MyClass(std::string newFile = "C:/tmp"); void formatAppelMessage(); void formatEtatEntree(); void formatSurveillanceLiaison(); void formatAccuseReception(); }
MyClass.cpp
En gros j'aimerais savoir ce que veut dire ce
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 MyClass::MyClass(std::string newFile) { ... functionFormat["PC"] = &MyClass::formatAppelMessage; functionFormat["IS"] = &MyClass::formatEtatEntree; functionFormat["MO"] = &MyClass::formatSurveillanceLiaison; functionFormat["R"] = &MyClass::formatAccuseReception; } ... void MyClass:formatData() { (this->*functionFormat[idCommande.c_str()])(); }
Idem pour cette portion
Code : Sélectionner tout - Visualiser dans une fenêtre à part typedef void(MyClass::*Fonction)();
Je suppose vaguement que cette map contient d'autres fonctions. Si c'est bien cela je m'excuse mais je suis debutant en c++, et je ne connaissais pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::map<std::string, Fonction> functionFormat
D'autre part si vous pouviez me confirmer cette partie. J'imagine qu'on va stocker les fonctions dans la map pour y faire appel plus tard. Ce qui me trouble c'est le &MyClass.
D'autant plus que le code semble en appeler une plus tard. Dans ce cas ce serait selon le idCommande (qui est de type string) qu'on appellerait la fonction adequate n'est-ce pas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part functionFormat["PC"] = &MyClass::formatAppelMessage;
Merci d'avance pour vos réponses
Code : Sélectionner tout - Visualiser dans une fenêtre à part (this->*functionFormat[idCommande.c_str()])();
Partager