Bonjour,

je me casse les dents sur un problème tout simple: faire une map avec des string et en face des fonctions

dans une classe de scripts, j'ai des mots en string qui correspondent à des fonctions du code.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
class scriptExecutor
{
public
 ...
private:
 
	int command_A(unsigned long int &wait);
	int command_B(unsigned long int &wait);
	int command_C(unsigned long int &wait);
        ...
}
Toutes les fonctions ont la même définition.

puis dans mon code j'ai droit à ceci dans ma fonction d'analyse des mots:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
if (command=="A" )
   return command_A(wait);
 
if (command=="B" )
   return command_B(wait);
...
J'ai donc décidé de changer cela, aussi j'ai pensé à utiliser un map + function

j'ai écris ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
std::map<std::string, std::function<int(unsigned long int &)>> listeCommande;
mais je n'arrive pas à écrire la suite !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
listeCommande["A"] = scriptExecutor::command_A;
me donne droit à un error: invalid use of non-static member function.

Je comprends pourquoi, je n'ai pas défini correctement la map car une fonction de classe n'a pas le même prototype qu'une simple fonction .
En fait, je ne sais pas faire et avec google je ne dois pas avoir les bons mots clefs.

Je ne sais pas écrire non plus l'itérator:

si command contient la valeur std:string
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
it = listeCommande.find(commande);
comment écrit on que le it->second doit utiliser l'argument (wait) ?