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 membre


Sujet :

C++

  1. #1
    Nouveau membre du Club Avatar de legend666
    Étudiant
    Inscrit en
    Mars 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2004
    Messages : 54
    Points : 39
    Points
    39
    Par défaut Pointeur de fonction membre
    Salut !

    Je continue mes problèmes avec mes tableaux de pointeurs de fonctions membres, avec cette fois ci une question simple: comment mettre en argument d'une fonction x un pointeur de fonction y possedant l' argument z ? Le tout encapsulé, bien sur...

    Je suis arrivé au code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    class REDIRECT
    {
    public:
      typedef void(Type::* pt2member)(string);  //Type est un template
      void add(const SCH& occ, pt2member function(string)); //voici ma fonction "x", string est l' argument "z"
                                                                                                //est-ce le bon prototype ?
      void test(const SCH& occ, Type& myClass, string arg); //l'argument = string arg
     
    private:
      map<SCH, pt2member> listINS; //si j' essaye de faire pt2member(string) j' ai une liste d' erreur provenant de la STL...
     
    };
     
    void REDIRECT < SCH, Type >::add(const SCH& occ, pt2member function(string))
    {
      listINS[occ] = function; //on assigne le pointeur de fonction a son occurence.
                                           //faut-il preciser l' argument (string) ou pas ?
      return;
    }
     
    void REDIRECT < SCH, Type >:: test(const SCH& occ, Type& myClass, string arg)
    {
      if(listINS.find(occ) != listINS.end())
        (myClass.*listINS[occ])(arg); //est-ce que mon passage d' argument est bon ?
     
      return;
    }
     
    //main
    //test est une instanciation de redirect
    //AFF est une classe externe aynt une fonction go(string arg);
    //afficher est une instanciation de AFF
      test.add(14, &AFF::go);
      test.test(14, afficher, "aha");
    Le compilo n' arrive pas à trouver la fonction add(const SCH& occ, pt2member function(string)). Je pense que cela vient du pointeur de fonction, mais comment passer l' argument ou plutot faut-il le passer ou non ?


    Merci d'avance.

  2. #2
    Nouveau membre du Club Avatar de legend666
    Étudiant
    Inscrit en
    Mars 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2004
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    Hum je poste trop vite....;

    Après maints et maints essais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    #include <iostream>
    #include <string>
    #include <map>
     
    using namespace std;
     
     
     
    template < typename SCH, typename ARG, class Type >
    class REDIRECT
    {
    public:
      typedef void(Type::* pt2member) (ARG);
      void add(const SCH & occ, pt2member function);
      void test(const SCH & occ, Type & myClass, ARG arg);
     
    private:
      map < SCH, pt2member > listINS;
     
     
    };
     
     
     
    template < typename SCH, typename ARG, class Type >
    void REDIRECT < SCH, ARG, Type >::add(const SCH & occ, pt2member function)
    {
      listINS[occ] = function;
     
      return;
    }
     
    template < typename SCH, typename ARG, class Type >
    void REDIRECT < SCH, ARG, Type >::test(const SCH & occ, Type & myClass, ARG arg)
    {
      if(listINS.find(occ) != listINS.end())
        (myClass.*listINS[occ]) (arg);
     
     
      return;
     
    }
     
     
     
    class AFF
    {
    public:
      void go(int d)
      {
        cout << "Hello ! D = " << d << endl;
      }
    };
     
     
     
    int main()
    {
      REDIRECT < int, int, AFF > test;
      AFF afficher;
     
      test.add(14, & AFF::go);
      test.test(14, afficher, 15);
     
      cout << "END !" << endl;
      return 0;
    }

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

Discussions similaires

  1. [POO] Pointeur sur fonction membre et héritage
    Par MrDuChnok dans le forum C++
    Réponses: 9
    Dernier message: 20/07/2006, 17h19
  2. Pointeur sur fonction membre avec parametre
    Par Glosialabolas dans le forum C++
    Réponses: 7
    Dernier message: 06/02/2006, 02h32
  3. Pointeur de fonction membre.
    Par fabone dans le forum C++
    Réponses: 2
    Dernier message: 18/01/2006, 13h18
  4. Réponses: 10
    Dernier message: 03/02/2005, 13h09
  5. Réponses: 5
    Dernier message: 12/01/2005, 20h58

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