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 :

[C++] Tableau de pointeurs de méthode ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 45
    Par défaut [C++] Tableau de pointeurs de méthode ?
    Bonjour à tous,

    Voici mon petit problème du moment. J'ai une 50 aine de fonctions différentes, dont le nom varie uniquement par un numéro. Je dois appeler l'une d'entre elles en fonction d'une valeur entière. Je pourrais utiliser un super switch mais ca me semble un peu peu barbare et long à coder.

    N'y aurait-il pas moyen de stocker les adresses des fonctions dans un tableau et d'y accéder via la valeur entière que je possède ?

    Ou alors, n'existerait-il pas une autre solution ?

    D'avance je vous remercie.

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef void (*FuncType)(); // A adapter selon le prototype de tes fonctions
     
    std::map<int, FuncType> Fonctions;
     
    Fonctions[1] = &Fonction1;
    ...
    Fonctions[36] = &Fonction36;
     
    int i = FonctionId;
    Fonctions[Id]();
    Si tes indices de fonction vont de 0 à N, tu peux aussi utiliser un simple tableau au lieu d'une std::map.

  3. #3
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Heu... pourquoi utiliser une map et pas un tout bête vector ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 45
    Par défaut
    Si tes indices de fonction vont de 0 à N, tu peux aussi utiliser un simple tableau au lieu d'une std::map.
    a-t-il dit ...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 45
    Par défaut
    Re bonjour à tou !

    J'ai un petit soucis concernant la déclaration du pointeur vers mes fonctions.

    La classe dans laquelle je travaille est "SyntaxicAnalyser"

    et le prototype de mes fonctions à stocker dont je veux stocker l'adresse dans un tableau est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void SyntaxicAnalyser::semanticRoutineXX() ;
    Pourriez-vous m'expliquer à quoi correspond chaque partie du typedef :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef void ( *FuncType) () ;
    pour que je puisse l'adapter à mes besoins ?

    Merci d'avance

  6. #6
    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
    Attention aux fonctions membres, leur type est différent.

    Donc, si ta fonction est de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void SyntaxicAnalyser::semanticRoutineXX();
    On pourra faire le typedef suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef void (SyntaxicAnalyser::*FuncType)();
    De manière générale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    type_retour Classe::Fonction(type_arg1, type_arg2, ...);
     
    typedef type_retour (Classe::*FuncType)(type_arg1, type_arg2, ...);

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

Discussions similaires

  1. Tableau de pointeurs sur objets
    Par bassim dans le forum C++
    Réponses: 11
    Dernier message: 13/12/2005, 19h45
  2. [GCC] Tableau de pointeurs pour accès multiples en asm
    Par Flo. dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 12/12/2005, 08h47
  3. tableau de pointeurs
    Par seal3 dans le forum C++
    Réponses: 7
    Dernier message: 01/11/2005, 20h51
  4. Tableau de pointeurs de fonctions
    Par Alp dans le forum C++
    Réponses: 7
    Dernier message: 29/10/2005, 13h19
  5. Pointeur de méthode
    Par John Fullspeed dans le forum Langage
    Réponses: 3
    Dernier message: 24/09/2004, 16h04

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