IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Pointeur de fonction nombre parametre inconnue


Sujet :

C++

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 513
    Par défaut Pointeur de fonction nombre parametre inconnue
    Bonjour a tous,
    voila en fait je suis en train de développer un projet dans lequel j'aurrais besoin de déclarer un pointeur vers une fonction dont je ne connais pas à l'avance le nombre de paramètres.
    Ainsi je commence par déclarer un type comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef void (*TFunct)(...);
    Ensuite je déclarer une structure me permettant d'ajouter en fait une fonction et de connaitre son nombre de parametre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct Type
    {
    	string nom;	// identificateur
    	int nArg;	// nombre d'argument
    	TFunct fct;	// adresse de la fonction
     
    };
    ensuite j'ai une fonction quelques part par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Essai( void ) { cout << "Essai" << endl; }
    et je fais ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Type te;
    te.nom = "essai";
    te.nArg = 0;
    te.fct = Essai;
    mais la le compilateur me dit que je fais une convertion invalide... je ne sais pas trop comment faire pour faire pointer mon pointeur vers la fonction... mon principale probleme est que je ne doit pas avoir tres bien compris comment fonctionne les pointeurs de fonctions...

    Je vous demande donc votre aide.
    Merci par avance.

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Impossible à faire de cette manière, désolé... en C++, le nombre d'arguments doit être connu, ou on utilise l'ellipse, mais ce n'est pas prudent. et encore, tous les types ne sont pas utilisables.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Conceptuellement, c'est un peu bizarre mais le code a l'air correct.
    T'as essayé de faire un cast de TFunct sur Te.ftc=Essai ?

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu ne peux pas référencer avec un même pointeur des fonctions ayant différents types ou nombres de paramètres, puisqu'elles n'ont pas le même type.

    Il faudra se tourner vers une solution un peu plus complexe ; boost::function pourra certainement aider pour ça.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Citation Envoyé par Laurent Gomila
    Tu ne peux pas référencer avec un même pointeur des fonctions ayant différents types ou nombres de paramètres, puisqu'elles n'ont pas le même type.

    Il faudra se tourner vers une solution un peu plus complexe ; boost::function pourra certainement aider pour ça.
    Au contraire, le Run-Time, les typeid et les dynamic_cast, ils servent justement à ça.

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Non, car dans ce cas, il y a une hiérarchie, et s'il y a une hiérarchie, autant utiliser un std::vector.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Je ne comprends pas ton histoire de hiérarchie, qu'est-ce que tu entends par là ?

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    dynamic_cast, c'est pour une hierarchie, si tu n'as pas de hierarchie, pas de dynamic_cast.

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Utilise tout simplement l'overloading.

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    ou les vargs...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    typedef void (*TFunct)(va_list);
     
    TFunct_Call(TFunct func, ...)
    {
       va_list l;
       va_start(l,func);
       func(l);
       va_end(l);
    };

  11. #11
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    cf mon premier message, à éviter.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/07/2011, 13h04
  2. Réponses: 9
    Dernier message: 15/05/2007, 12h41
  3. Réponses: 7
    Dernier message: 08/04/2006, 12h18
  4. Pointeur sur fonction membre avec parametre
    Par Glosialabolas dans le forum C++
    Réponses: 7
    Dernier message: 06/02/2006, 02h32
  5. Fonction Execlp avec nombre parametres variable
    Par laurent_ifips dans le forum C
    Réponses: 3
    Dernier message: 25/11/2005, 20h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo