Clonk
Messages postés278Date d'inscriptionmardi 22 janvier 2002StatutMembreDernière intervention29 août 2006
-
8 juil. 2004 à 10:51
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 2009
-
9 juil. 2004 à 16:57
Bonjour,
Je voudrais, por alléger mon appli, pouvoir executer une fonction (déjà définie dans mon code) dont le nom est contenu dans une variable.
Par exemple :
J'ai la fonction : double calculate(double x)
et j'ai une variable : char * Mycalculate = "calculate(125)";
je voudrais executer la fonction contenue dans Mycalculate... C faisable ou alors faut que j'arrête de code en Lisp??? ;)
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 8 juil. 2004 à 12:31
Mais si j'ai bien compris le probleme, c'est pas du tout possible. Les noms de variables servent qu'a le a compilation, en RunTime ca reste des adresses memoires toutes betes.
Clonk
Messages postés278Date d'inscriptionmardi 22 janvier 2002StatutMembreDernière intervention29 août 2006 8 juil. 2004 à 13:31
Bah ouais, c'est bien ça que je voulais faire...
Tant pis, j'aurais au moins demandé... il me reste plus qu'à faire des fonctions bien lourdes pour reconnaitre mes noms de fonctions...
Clonk
Messages postés278Date d'inscriptionmardi 22 janvier 2002StatutMembreDernière intervention29 août 2006 9 juil. 2004 à 11:18
Bha voilà pourquoi : j'ai une base de contraintes à executer sur un ensemble de fichiers, il y a des milliers de contraintes contenant chacune parfois jusqu'à des dizaines d'appels de fonction. Je stocke tout ça et je les execute au moment du programme.
forcément, quand tu lis, tu récupère des chaines de caractère... bah je voulais lancer mes fonctions à partir de ces chaines. Attention, pas les créers! ça c'est déjà fait!! mais les lancer en tenant compte des paramètres. Je C pas si j'ai été clair mais bon...
genre :
dans mon code j'ai la fonction:
void Afficher (int a, int b)
{
cout<<a<<" et "<<b<<endl;
}
et je récupère dans ma liste de contraintes : "Afficher (1, 15)"
voilà ce que je veux executer...
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 9 juil. 2004 à 12:07
Mais tu en a combien de fonction possible a executer par l'intermediaire d'une chaine ? car si c'est un nombre bien determine alors cela va etre possible
Clonk
Messages postés278Date d'inscriptionmardi 22 janvier 2002StatutMembreDernière intervention29 août 2006 9 juil. 2004 à 13:22
Bah une par une....
Je dois tester chaque fonction...
genre je récupère une chaine un peu comme ça:
"afficher(8,12)|estVide()|superieur(val, 15)" etc...
Apres je les prends une par une et je voudrais les executer...
C possible alors???
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 9 juil. 2004 à 14:01
Ma question etait : combien tu en as :
c'est quoi la liste de toute les fonctions possibles
************
afficher
estVide
superieur
...
************
la liste tu la connais ? combien d'elements ?
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 9 juil. 2004 à 16:57
Ok alors la solution (ou l'idee de la solution)
tu prends les chaines une par une, et tu va les traitees comme ceci :
tu prends le nom (nom de la fonction catchName) il copie tout les premiers caracteres jusqu'a la parenthese ouvrante puis après tu cherches dans une table (c'est la liste des fonctions) la fonction qui correspond au nom, tu as donc le nombre d'arguments qui sont tous des entiers, et apres tu lis nombre par nombre jusqu'a la parenthse fermante et apres tu appelles la fonciton.