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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 107
    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 confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    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.

  3. #3
    Expert confirmé

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

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    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 actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 107
    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, 13h39
  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, 15h13
  3. Réponses: 2
    Dernier message: 17/04/2007, 17h14
  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, 21h03
  5. Réponses: 3
    Dernier message: 06/11/2005, 18h02

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