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 :

Pointeurs de fonction


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut Pointeurs de fonction
    Bonjour,

    J'ai une méthode qui doit appeler une autre fonction. Cette fonction est choisie selon un paramètre enum de la méthode.

    N'ayant pas envie que l'appelant de la méthode s'embête en fournissant la syntaxe de la fonction qui est appelée en un second temps, j'utilise donc un enum.

    Cette fonction, qui reste donc à déterminer, est au sein de la méthode appelée plusieurs fois dans une boucle. Dans le corps de la boucle, je dois donc référencer une fonction que je ne connais pas encore. Ou plutôt, je dispose de plusieurs prototypes de fonctions, mais je ne sais pas encore laquelle utiliser.

    Je pensais donc créer dans la méthode un pointeur de fonction, et une fois que je connais l'enum, je pourrai, via un switch, pointer vers la bonne fonction, puis utiliser le pointeur à ma guise.

    Mais j'ai un problème de syntaxe : le type de retour des fonctions est identique, mais les signature des fonctions sont différentes (en nombre et type).

    1 - comment déclarer le pointeur
    2 -une fois connue la fonction vers laquelle il doit pointer, comment effectuer l'affectation ?

    Merci.

  2. #2
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Salut,

    Je ne sait pas si c'est valable pour des pointeurs sur fonctions mais est ce que tu ne peux pas déclarer ton pointeur de départ comme un void * et ensuite le caster suivant tes besoins ?

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par Higestromm
    Je ne sait pas si c'est valable pour des pointeurs sur fonctions mais est ce que tu ne peux pas déclarer ton pointeur de départ comme un void * et ensuite le caster suivant tes besoins ?
    Un pointeur de fonction n'est pas compatible avec un void*. De même qu'il n'y a pas compatibilité entre pointeurs sur fonctions à arguments différents.

    Il existe boost::function et boost::bind, qui permettent d'adapter des fonctions pour les contraindre à une signature unique, je ne sais pas si ça peut te servir, puisque je n'ai pas compris ce que tu espèrerais pouvoir faire avec des pointeurs de fonction ayant des arguments non connus de la personne sensée les utiliser.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Ce que je veux, c'est qu'un utilsiateur appelle une fonction A avec un paramètre x, et qu'en fonction de la valeur de x, que A appelle une fonction B parmi n fonctions possibles.

  5. #5
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Tu peux bidouiller en faisant en sorte que tes fonctions appelés aient les meme paramètres : des void * dont certains sont inutilisés ou bien une structure qui contient tes arguments...

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par oodini
    Ce que je veux, c'est qu'un utilsiateur appelle une fonction A avec un paramètre x, et qu'en fonction de la valeur de x, que A appelle une fonction B parmi n fonctions possibles.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void A(int x)
    { 
      switch (x)
      {
        case 1: f(); break;
        case 2: g(42); break;
        default: h(x-1); break;
      }
    }
    Je me doute que ce n'est pas ça que tu veux... Alors, si tu pouvais expliciter un peu plus ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    C'est ça, ajouté du fait que ce switch doit être suivi d'une procédure d'une dizaine de ligne dans laquelle figure une boucle, qui elle-même fait appel à la fonction qui vient d'être déterminée.

    J'aimerais donc éviter de répéter n fois cette procédure, dont le contenu doit être ajusté en fonction de... la fonction.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. opengl et pointeur de fonction
    Par Oldhar dans le forum C
    Réponses: 5
    Dernier message: 06/11/2003, 23h56
  2. Declaration de fonction retournant un pointeur sur fonction
    Par pseudokifaitladifférence dans le forum C
    Réponses: 5
    Dernier message: 11/08/2003, 19h37
  3. Matrice de pointeurs de fonctions
    Par sebduth dans le forum C
    Réponses: 15
    Dernier message: 18/07/2003, 14h03
  4. [Kylix] Pointeur de fonctions
    Par _dack_ dans le forum EDI
    Réponses: 1
    Dernier message: 03/07/2003, 10h17
  5. pointeur de fonction
    Par kardath dans le forum C
    Réponses: 4
    Dernier message: 28/12/2002, 14h39

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