Appeler une fonction dont le nom peut varier? - C++ - Programmation
Marsh Posté le 12-10-2006 à 16:06:50
La méthode classique consiste à utiliser des pointeurs de fonctions...
Ensuite, le dispatch se fait par un tableau, des "if" ou un switch, peu importe.
Une réelle solution serait d'utiliser dlopen/dlsym (sous Linux) ou LoadLibrary/GetProcAddr (sous Windows)... Mais c'est lourd !!!
Marsh Posté le 12-10-2006 à 16:12:25
spotaszn a écrit : La méthode classique consiste à utiliser des pointeurs de fonctions... |
Oui tu as raison je vais utiliser une map ou quelque chose du genre pour faire ma correspondance. Je n'y avais pas pense :-) Merci encore!
Marsh Posté le 12-10-2006 à 17:11:59
_darkalt3_ > d'après la tentative infructueuse qu'il nous propose, je dirais en "C avec des classes"...
Marsh Posté le 12-10-2006 à 17:47:46
ReplyMarsh Posté le 13-10-2006 à 22:32:55
l'idee de la map est pas mal :
de tete :
typedef T_fonction void(*f)(int);
struct myLessThan
{
bool operator()(const char* s1, const char* s2) const
{
return strcmp(s1, s2) < 0;
}
};
map<string, T_fonction, myLessThan> m;
m["toto_f1"] = toto_f1;
m["toto_f2"] = toto_f2;
maintenant :
map<string, T_fonction, myLessThan>::const_iterator ite;
if ( (ite=m.find(fname))!=m.end())
{
int argument = 5;
T_fonction fPtr = ite->second;
fPtr(5);
}
Marsh Posté le 15-10-2006 à 12:25:04
je sais pas si ca aide pour du c++ (ya peut-être un équivalent), mais en php on peut construire des noms comme ca :
$i=7;
$toto_f{$i} = 5;
echo $toto_f7;//affiche 5
Marsh Posté le 15-10-2006 à 13:17:20
DarWog a écrit : je sais pas si ca aide pour du c++ (ya peut-être un équivalent), mais en php on peut construire des noms comme ca : |
oui mais non, ça n'a rien à voir.
Marsh Posté le 15-10-2006 à 15:29:54
DarWog a écrit : je sais pas si ca aide pour du c++ (ya peut-être un équivalent), mais en php on peut construire des noms comme ca : |
Il y a fort à parier qu'il vient d'un langage du type PHP, pour vouloir composer le nom d'une fonction ainsi...
Marsh Posté le 12-10-2006 à 15:44:02
Salut,
Je dois appeler differentes fonctions dont le nom depend d'un parametre que l'utilisateur me fournit en entree. En l'occurence:
- si l'utilisateur me donne la chaine "f1", je devrais appeler la fonction toto_f1
- si l'utilisateur me donne la chaine "f2", je devrais appeler la fonction toto_f2
- etc.
Je pensais faire une map entre les arguments possible ("f1", "f2",...) et le nom des fonctions a appeler (toto_f1, toto_f2, ...) et ensuite utiliser un pointeur de fonction qui s'initialiserait avec le bon nom de fonction. Mon probleme c'est que je ne sais pas comment faire. J'ai fait quelques tests simples pour voir:
Bien sur ca ne marche pas puisque j'essaye de convertir un char * en une fonction...
Je ne sais pas comment faire pour dire au compilo que je veux atteindre la fonction qui correspond au nom que je lui donne.
Pouvez-vous m'aider?
Merci