C++ nom de fonction a appeler dans un string
gfitas
-
techno01 -
techno01 -
Bonjour,
J'aimerais pouvoir faire en sorte que l'utilisateur entre un mot et que celui ci sois stocker dans une variable de type string et qu'ensuite la valeur string link sur une fonction. Par exemple (je sais que ca marche pas mais c'est pour donner l'idee) :
void azerty();
void az();
void ae();
cout<<"Fonction :";
string fct;
cin>>fct;
try
{
fct();
}
catch(...)
{
}
Ca marcherait dans le cas seulement ou biensur fct serait egal a azerty ou a az ou a ae ....
Merci d'avance(je suis sous visual studio c++ mais peux aussi etre sous c++ builder)
J'aimerais pouvoir faire en sorte que l'utilisateur entre un mot et que celui ci sois stocker dans une variable de type string et qu'ensuite la valeur string link sur une fonction. Par exemple (je sais que ca marche pas mais c'est pour donner l'idee) :
void azerty();
void az();
void ae();
cout<<"Fonction :";
string fct;
cin>>fct;
try
{
fct();
}
catch(...)
{
}
Ca marcherait dans le cas seulement ou biensur fct serait egal a azerty ou a az ou a ae ....
Merci d'avance(je suis sous visual studio c++ mais peux aussi etre sous c++ builder)
A voir également:
- C++ nom de fonction a appeler dans un string
- Fonction si et - Guide
- Appeler en privé - Guide
- Nom de l'adresse - Forum Jeux vidéo
- Nom de compte steam exemple - Forum Jeux vidéo
- Annuaire portable gratuit a partir d'un nom ✓ - Forum Mobile
2 réponses
Salut.
La seule solution que je vois, c'est de faire explicitement une table de correspondance, éventuellement avec des pointeurs de fonction.
Il faut bien voir que le nom d'une fonction n'est que temporaire et n'a plus sa place dans un programme compilé. En effet, après compilation l'appel à une fonction se résume (en gros) à l'appel d'une zone mémoire, un programme compilé a donc "oublié" de le nom de la fonction. Pour t'en convaincre, il suffit de faire une recherche dans l'exécutable après l'avoir "stripper". Or la valeur de fct n'est connu qu'à l'exécution (entrée par l'utilisateur) il n'est donc plus possible de faire le lien directement.
Voilà, j'espère être clair et que tu comprends le problème. Te reste à faire la table de correspondance.
La seule solution que je vois, c'est de faire explicitement une table de correspondance, éventuellement avec des pointeurs de fonction.
Il faut bien voir que le nom d'une fonction n'est que temporaire et n'a plus sa place dans un programme compilé. En effet, après compilation l'appel à une fonction se résume (en gros) à l'appel d'une zone mémoire, un programme compilé a donc "oublié" de le nom de la fonction. Pour t'en convaincre, il suffit de faire une recherche dans l'exécutable après l'avoir "stripper". Or la valeur de fct n'est connu qu'à l'exécution (entrée par l'utilisateur) il n'est donc plus possible de faire le lien directement.
Voilà, j'espère être clair et que tu comprends le problème. Te reste à faire la table de correspondance.
J ai pas totalement comprendre votre prob
mais je crois ce code va etre utile
# include <iostream>
# include <cstdio>
using namespace std;
void callFunc(int);
void func1(void);
void func2(void);
void func3(void);
int main()
{
/// On doit enter func1,func2 ou func3 pour invoquer les functions
string str;
cout << "Enter your string -> " ;cin >> str;
if(str.compare("func1")==0)callFunc(1);
else if(str.compare("func2")==0)callFunc(2);
else if(str.compare("func3")==0)callFunc(3);
else cout << "The index call is incorrect " << endl;
}
void callFunc(int indexCall)
{
switch(indexCall)
{
case 1:
func1();
break;
case 2:
func2();
break;
case 3:
func3();
break;
}
}
void func1(void)
{
cout << "I am func 1 " << endl;
}
void func2(void)
{
cout << "I am func 2 " << endl;
}
void func3(void)
{
cout << "I am func 3 " << endl;
}
mais je crois ce code va etre utile
# include <iostream>
# include <cstdio>
using namespace std;
void callFunc(int);
void func1(void);
void func2(void);
void func3(void);
int main()
{
/// On doit enter func1,func2 ou func3 pour invoquer les functions
string str;
cout << "Enter your string -> " ;cin >> str;
if(str.compare("func1")==0)callFunc(1);
else if(str.compare("func2")==0)callFunc(2);
else if(str.compare("func3")==0)callFunc(3);
else cout << "The index call is incorrect " << endl;
}
void callFunc(int indexCall)
{
switch(indexCall)
{
case 1:
func1();
break;
case 2:
func2();
break;
case 3:
func3();
break;
}
}
void func1(void)
{
cout << "I am func 1 " << endl;
}
void func2(void)
{
cout << "I am func 2 " << endl;
}
void func3(void)
{
cout << "I am func 3 " << endl;
}
Merci de m'avoir éclaire une fois de plus