Alors, je voudrais créer une std::map dont les clés seraient des chaînes de caractères (std::string) et dont les contenus seraient des fonctions. Le problème est que je n'ai pas la syntaxe, je ne sais pas comment déclarer le "type" pointeur de fonction. J'ai essayé ceci, naïvement :
Mais, bien entendu, on ne peut pas nommer les paramètres de cette façon. Après diverses expériences et en regardant bien les messages du compilateur, j'en suis arrivé à celà :
std::map<std::string, void(VM*)> opcodes;
Mais le compilateur me balance une erreur quand j'essaie d'affecter une fonction :
void foo(VM* vm)
{
}
// ...
{
opcodes["foo"] = foo;
}
Il me dit que j'éssaie d'écrire dans un endroit accessible en lecture seule, ou alors une erreur de type (parfois les deux).
J'ai cherché un peu partout sur le web, mais je n'ai pas trouvé de posts dans les forums ou sur la faq de developpez.com qui évoque de problème. J'ai bien entendu parler des foncteurs, mais ils ne sont pas vraiment adaptés à mon cas (ça donnerait du code trop lourd).
A toutes fins utiles, je travaille sous GNU/Linux (x86_64) avec G++ et ma std::map en question devra être un membre statique d'une classe.
Merci de m'indiquer la syntaxe à utiliser, et bonne soirée
J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
Je crois que c'est void (VM::*)(void) mais je suis pas sûr. En tout cas ça ne marchera surement qu'avec les fonctions statiques.
EDIT: qu'est-ce que je peux dire comme conneries parfois...
En fait, les fonctions que contiendra cette map sont de "vraies" fonctions, pas des méthodes. Donc c'est un peu comme si la map était une variable globale (oui, c'est mal, pataper). Et la map ne sera PAS un membre de la classe VM, mais d'une autre classe.
Je vais essayer ce que tu proposes.
EDIT : Il me donne une erreur de type
no matches converting function 'foo' to type 'void (class VM::*)()'
Avec les insultes habituelles.
J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
OK, je vais essayer quand j'aurai codé le reste du projet. Ça a l'air bien. Merci du conseil.
J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
Une std::map de pointeurs de fonctions
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.