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
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()])();
}
En gros j'aimerais savoir ce que veut dire ce
Code : Sélectionner tout - Visualiser dans une fenêtre à part
typedef void(MyClass::*Fonction)();
Idem pour cette portion
Code : Sélectionner tout - Visualiser dans une fenêtre à part
std::map<std::string, Fonction> functionFormat
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.

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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
functionFormat["PC"] = &MyClass::formatAppelMessage;
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
(this->*functionFormat[idCommande.c_str()])();
Merci d'avance pour vos réponses