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 :

Utilisation d'un pointeur de fonction membre


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut Utilisation d'un pointeur de fonction membre
    Bonjour,

    Cela fait quelques heures que je cherche la syntaxe et que je ne trouve pas.

    Un pointeur de fonction sur fonction membre de classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef void (Automate::* Function_t)(void);
    Une structure qui contient un membre pointeur de fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        typedef struct
        {  int State;
            int Event;
            Function_t Function;
            int NextState;
        } Automate_t;
    Une variable locale de type Automate_t :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const Automate::Automate_t a = { 0, 1, NULL, 0 };  // peu importe si la syntaxe n'est pas très bonne, c'est pour l'exemple
    Et enfin la tentative (pour l'instant) d'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            if(a.Function != NULL) (a.Function)();
    Mais bien sûr "syntax error" et je n'arrive pas à comprendre comment le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Automate.cpp:30: erreur : must use '.*' or '->*' to call pointer-to-member function in 'a.Automate::Automate_t::Function (...)', e.g. '(... ->* a.Automate::Automate_t::Function) (...)'
                 (a.Function)();
                              ^
    Bien sûr, j'ai fait plusieurs tentatives et variations autour de cette syntaxe mais je ne trouve pas.

    Challenge : qui trouveras la solution et la syntaxe correcte ?

    PS : Pour info (et bien que cela ne soit pas utile dans ce cas), c'est pour un automate à états finis
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    voilà la bestiole de syntaxe
    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
    template< class T >
    	class Callback
    	{
    		typedef void(T::*ptrfct)();
    		public:
    			Callback(T* _pObj, ptrfct _pCallback)
    				: m_pObj(_pObj)
    				, m_pFct(_pCallback)
    			{
    			}
    			~Callback() {}
     
    			void Call()
    			{
    				(m_pObj->*m_pFct)();
    			}
     
    		protected:
    			T*		m_pObj;
    			ptrfct	m_pFct;
    	};
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Allez, je le remets dans mon contexte, la solution est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(a.Function != NULL)
                (this->*a.Function)();
    merci pour le coup de main
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  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
    Tu as essayé de te mettre à std::function, histoire d'éviter cette syntaxe à la noix, qui nous fait nous gratter la tête à chaque fois ?

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par oodini Voir le message
    Tu as essayé de te mettre à std::function, histoire d'éviter cette syntaxe à la noix, qui nous fait nous gratter la tête à chaque fois ?
    Je reconnais que j'ai un peu de mal à mettre un cachet de doliprane en commentaire pour les générations futures de lecteurs mais la syntaxe de std::function me parait tout aussi rébarbative.

    Je vais quand même y regarder plus en détail, merci pour le conseil.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

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

Discussions similaires

  1. Utilisation des pointeurs de fonctions membres
    Par jobartom dans le forum Langage
    Réponses: 8
    Dernier message: 09/09/2010, 15h51
  2. Pointeur de fonction membre.
    Par fabone dans le forum C++
    Réponses: 2
    Dernier message: 18/01/2006, 13h18
  3. Pointeur de fonction membre
    Par legend666 dans le forum C++
    Réponses: 1
    Dernier message: 04/10/2005, 20h46
  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