J'écris une scène cocos2dx en C++. Je cherche à créer un ensemble de directions de corde basé sur des appuis de bouton qui seront exécutés quand je met à jour la scène. Le problème est que j'ai besoin de corréler ces chaînes à des méthodes de la classe qui peuvent être remplacées par des sous-classes pour personnaliser le comportement en fonction du bouton. J'ai du mal à créer une carte entre la chaîne et les pointeurs vers les méthodes de classe de scène.Mapper une chaîne à une fonction de classe en C++
Voici le code applicable
Dans Scene.h
std::map<std::string, void (Scene::*)()> correlateDirections;
Dans Scene.cpp
correlateDirections["c"] = &this->c
void Scene::c() {
std::cout << "c" << std::endl;
}
XCode me donne l'erreur « Impossible de créer un pointeur non constant fonction de membre. "
Lorsque j'essaie de rendre le pointeur sur la méthode constante, la même erreur se produit toujours.
Dans Scene.h
std::map<std::string, void const (Scene::*)()> correlateDirections;
Utiliser '& Scène :: c' pour obtenir l'adresse de la fonction membre – MRB
qui fonctionne, mais comment puis-je appeler la méthode dans la fonction de mise à jour? correlateDirections [chaîne](); ? Il est dit que le type retourné n'est pas une fonction ou un pointeur de fonction –
Obtenez votre pointeur de fonction et appelez-le de cette façon: '(instance. * FuncPointer) (args)'. Et si vous voulez utiliser 'this' comme instance:' (this -> * funcPointer) (args) '. Le type de retour de 'correlateDirections [chaîne]' est un itérateur. récupère ses données internes: '(this -> * (* correlateDirections [string]))()' – MRB