begin process at 2012 05 28 13:11:05
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Divers

 > 

Appels des fonctions


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Appels des fonctions

dimanche 24 septembre 2006 à 17:09:08 | Appels des fonctions

goast_tu

Salut!
Est ce que vous pouvez me dire comment on fait pour appeler une fonction presante dans le programme si on connait son nom sous forme d'une chaine de caracteres. Par ex si dans mon programme  j'ai une fonction toto() et j'aimerais l'appeler de la facon suivante:
appeler("toto");

Merci
dimanche 24 septembre 2006 à 17:21:39 | Re : Appels des fonctions

nightlord666

Membre Club
Impossible en C++, ou alors tu la déclare en __declspec(dllexport),et tu utilise LoadLibrary / GetProcAddress pour lancer ta fonction.


Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.
dimanche 24 septembre 2006 à 18:35:31 | Re : Appels des fonctions

luhtor

Si c'est possible, mais un peu complexe.
Tu créer un tableau de pointeur de fonction.

typedef void (pointeur_fonction*)(void); => un truc du genre.

std::map<std::string, pointeur_fonction>;

Apres tu ajoutes les fonctions que tu veux, dans ton cas:
void toto();

map[std::string("toto")] = &toto;

Puis tu définies une fonction Appeler(const std::string & _func) qui fait:

map[func]();


Ex:
#include <iostream>
#include <map>
#include <string>

typedef void (*_function)(void);

void toto()
{
    std::cout << "coucou" << std::endl;
}

int main()
{
    std::map<std::string, _function> test;
   
    test[std::string("toto")] = &toto;
   
    test[std::string("toto")](); <= appel de la fonction.
   
    system("PAUSE");
   
    return 0;
}

Mais bon, faut etre un peu tordu quand meme. Pk tu veux faire un truc pareil ?

dimanche 24 septembre 2006 à 18:49:49 | Re : Appels des fonctions

nightlord666

Membre Club
En effet j'avais pas pensé au tableau de pointeurs de fonctions, au temps pour moi...


Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.
dimanche 24 septembre 2006 à 18:56:43 | Appels des fonctions

goast_tu

luhtor et comment on le fais en C car je connai pratiquement rien en C++
dimanche 24 septembre 2006 à 18:58:47 | Re : Appels des fonctions

goast_tu

j'ai une ptite question il manque pas par hasard un * devant   
test[std::string("toto")](); <= appel de la fonction.


?
dimanche 24 septembre 2006 à 19:17:30 | Re : Appels des fonctions

luhtor

Réponse acceptée !
Euh pour l'étoile, il doit surement en manquer une.  Mais j'ai un petit pb, car meme ca, ca marche:
    test[std::string("toto")] = &toto;
    test[std::string("toto2")] = &toto2;
   
    (****test[std::string("toto")])();
    (****test[std::string("toto2")])();

Doit y avoir une raison, ou alors un hasard extraordinaire, je vais essayer de voir pk.

En C ? C'est un peu la é'"(*-ù"$'(^-.
Ca ressemblera plutot a un truc comme ca.

#include <iostream>

typedef void (*_function)(void);

void toto()
{
    std::cout << "coucou"  << std::endl;
}

void toto2()
{
    std::cout << "coucou 2" << std::endl;
}

int main()
{
    char * nom[2] = { "toto", "toto2" }; // <= allocation statique
    _function pointer[2] = { &toto, &toto2 };
   
    char * call_what = "toto1";
   
    for (int k = 0 ; k < 2 ; ++k)
        if (strcmp(call_what, nom[k]) == 0)
            pointer[k]();
   
    system("PAUSE");
   
    return 0;
}

Reste a organiser tout ca pour faire un truc propre.
dimanche 24 septembre 2006 à 19:18:24 | Re : Appels des fonctions

luhtor

Bon j'ai oublié de corrigé, c'est pas call_what = "toto1", mais "toto" ou "toto2" évidemment.


dimanche 24 septembre 2006 à 19:39:33 | Re : Appels des fonctions

SAKingdom

Membre Club
Réponse acceptée !

cout en C? C'est pas plutot printf?

Pour le reste, ce serais pas plus "propre" avec une structure?

#include <stdio.h>

typedef void (*_function)(void);

typedef struct _p_struct
{
   char *name;
   _function function;

} POINTEUR_STRUCT;

void toto()
{
    printf("coucou 1\n");
}

void toto2()
{
    printf("coucou 2\n");
}

int main()
{
    POINTEUR_STRUCT _p_struct[2] = {{"toto", toto}, {"toto2", toto2}};
    
    char * call_what = "toto";
   
    for (int k = 0 ; k < 2 ; ++k)
        if (strcmp(call_what, _p_struct[k].name) == 0)
            _p_struct[k].function();
    
    system("PAUSE");
   
    return 0;
}

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution

dimanche 24 septembre 2006 à 19:41:40 | Re : Appels des fonctions

niketou

#include <iostream>
#include <map>
#include <string>

//j' ai 20 erreur qui ont l'air de provenir de #include <map>

1 2

Cette discussion est classée dans : fonction, programme, fonctions, appeler, appels


Répondre à ce message

Sujets en rapport avec ce message

net use * /delete EN C++ [ par LeBobo ] Salut. J'ai un petit programme qui utilise la fonction : system(''net use * /delete'') ; Le problème est que mon programme à une interface graphique w Creer ses propres fonctions [ par CHENRY ] En VC++6, avec les MFC, je voudrais ajouter à mon projet un fichier de fonctions et procédures personnelles. J'ai créé un fichier d'en-tete contenant Vérifier le bon déroulement de mon prog ds 1 TMemo [ par ivdz ] Bonjour, J'ai développé sous C++ builder 6 un programme avec une interface qui possède des TEdit, 2 boutons (Valider et Quitter) et un TMemo. Le bouto ouvrir un programme [ par Adeon ] Salut!y a t-il une fonction qui est cappable d'ouvrir un programme que l'on defini dans la fonction.Bien sure, quand je dis ouvrir, ce n'est pas dans strcat() ???? [ par supergrey ] Salut tout le monde, jai un petit probleme avec la fonction strcat() , je commence a peine un programme que deja je bloque la dessus jaimerai de l'aid attendre que le shell soit fini C++ [ par McK_N ] Salut,je veux appeler la fonction Shell et je veux que mon programe arrête jusqu'à ce que le shell soit terminé.Comment puis-je le faire avec la fonct analyseur d'expression [ par loicus ] Voila, je cherche une fonction, qui pourrait transformer une expression (suite de char) en une ligne de code qui sera utiliser par le programmeex : ma Démarer un programme [ par supergrey ] Bonjour, je voudrais savoir comment lancer un .exe a partir d'un programme j'ai essayé ca:system("start c:/Mes jeux/jeu1.exe");Mais cette fonction n'a à propos des threads [ par GUERRIER_ABSOLU ] Salut, je voudrais savoir s'i quelqu'un a déjà essayé d'appeler une fonction dans un thread et a remarqué quelque chose d'innatendu. En fait quand j'a appel a une fonction [ par cyb_dev ] Bonjour je debute en c et je souhaiterais savoir comment faire pour appeler une fonction.J'aimerais qu'un evenement dans mon programme (une variable à


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,170 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales