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

Langage C++ Discussion :

Pointeur de fonction stoqué dans un attribut d'une classe


Sujet :

Langage C++

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : septembre 2011
    Messages : 104
    Points : 120
    Points
    120
    Par défaut Pointeur de fonction stoqué dans un attribut d'une classe
    Bonjour,

    J'aimerais pouvoir stocker un pointeur de fonction en tant qu'attribut dans une classe tel que :



    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
     
    // maclass.h
    typedef void(*Action)();
     
    class MaClass
    {
         protected:
              Action action;
     
         public:
              MaClass(Action action);
              void Do();
    };
     
     
    //maclass.cpp
    MaClass::MaClass(Action action)
    {
         this->action = action;
    }
     
    void MaClass::Do()
    {
         // pas sur de la syntaxe ici...
         this->action();
    }
     
     
    //autre fichier.cpp
    // j'aimerais pouvoir faire quelque chose dans le genre :
    MaClass nouvelle_class = MaClass( /* creer une fonction void à la volée */ )
    J’espère avoir été clair.
    Est-ce possible de faire quelque chose du genre ?
    Si non, quelle serait la solution qui s'en rapprocherait le mieux ?

    Merci d'avance pour vos réponses

  2. #2
    Expert éminent

    Inscrit en
    novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : novembre 2005
    Messages : 5 145
    Points : 6 863
    Points
    6 863
    Par défaut
    Citation Envoyé par flow10000 Voir le message
    void MaClass:o()
    {
    // pas sur de la syntaxe ici...
    this->action();
    }[/code]
    Elle est correcte. Mais pourquoi mettre des this-> un peu partout? J'utiliserais (*action)(); parce que ce qui permet de se passer du * est la pour la compatibilite, mais c'est plus stylistique qu'autre chose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaClass nouvelle_class = MaClass( /* creer une fonction void à la volée */ )
    Possible en C++11. Mais alors ce n'est pas un void (*)() qu'il faut mais un std::function. L'appel se fait alors MaClass([](){ ...})En passant, j'ai un probleme avec le melange des langues dans les identificateurs. MaClasse ou MyClass, mais MaClass, ca me gene.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    juin 2003
    Messages
    5 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : juin 2003
    Messages : 5 732
    Points : 10 546
    Points
    10 546
    Billets dans le blog
    3
    Par défaut
    Bonjour Florent,

    Par rapport à l'utilisation que tu sembles vouloir faire de ton pointeur de fonction, je me dis que tu devrais jeter un oeil aux objets fonctions / foncteurs. Ca pourrait donner ça par exemple :

    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
    class Action
    {
    public:
        virtual void Do() = 0;
    };
     
    class MaClass
    {
         protected:
              Action *action;
     
         public:
              MaClass(Action *action);
              void Do();
    };
     
    MaClass::MaClass(Action *a) : action(a)
    {
    }
     
    void MaClass::Do()
    {
         this->action->Do();
    }
     
    class HelloWorldAction : public Action
    {
    virtual void Do()
    {
        std::cout << "Hello World!\n";
    }
    };
     
    class PrintMsgAction : public Action
    {
    public:
        PrintMsgAction(const std::string & m) : msg(m) {}
     
    private:
        std::string msg;
     
        virtual void Do()
        {
            std::cout << this->msg << "\n";
        }
    };
     
    MaClass nouvelle_class1(new HelloWorldAction());
    MaClass nouvelle_class2(new PrintMsgAction("Hello World again!"));
    Bon y'aurait deux ou trois bricoles à gérer (destruction virtuelle de l'action reçue), mais voilà en gros.

    Tu peux regarder le design pattern commande aussi.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : septembre 2011
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    Problème résolu !
    J'ai effectivement utilisé les std::function

    Merci à vous deux

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

Discussions similaires

  1. Inserer la valeur d'un attribut dans un attribut d'une balise <td>
    Par jubourbon dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/02/2009, 14h39
  2. utiliser les attribut d'une classe dans une autre classe
    Par kaissaoui dans le forum Langage
    Réponses: 11
    Dernier message: 18/07/2007, 16h13
  3. Réponses: 2
    Dernier message: 17/04/2007, 18h14
  4. [AS2] Atteindre attribut d'une classe depuis une fonction interne a la classe
    Par Demco dans le forum ActionScript 1 & ActionScript 2
    Réponses: 6
    Dernier message: 18/04/2006, 22h03
  5. Réponses: 3
    Dernier message: 06/11/2005, 19h02

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