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 :

Appel dynamique de méthode


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Par défaut Appel dynamique de méthode
    J'ai trouver dans la FAQ une maniere de tester une chaine de caracteres celon plusieurs critères :

    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
    // fonctions de traitement
    void parametre_input();
    void parametre_output();
    void parametre_inconnu();
     
    // type pointeur de fonction de traitement
    typedef void (*parametre_fct)();
     
    void analyse_parametre( const string & Param )
    {
        static map<string, parametre_fct> param_map;
     
        // initialiser la map si ce n'est pas fait
        if ( param_map.empty() )
        {
            param_map[ "/input" ] = parametre_input;
            param_map[ "/output" ] = parametre_output;
        }
     
        // rechercher la fonction associée à Param
        map<string, parametre_fct>::const_iterator i = param_map.find( Param );
        if ( i == param_map.end() )
        {
            // échec
            parametre_inconnu();
        }
        else
        {
            // appeler la fonction associée
            (i->second)();
        }
    }
    Je souhaiterai implanter sa dans une classe et au lieu d'appellé une fonction appellé une méthode de cette même classe la partie à modifier serai donc celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // rechercher la fonction associée à Param
        map<string, parametre_fct>::const_iterator i = param_map.find( Param );
        if ( i == param_map.end() )
        {
            // échec
            parametre_inconnu();
        }
        else
        {
            // appeler la fonction associée
            (i->second)();
        }
    Mais je n'ai aucune idée de comment procéder.

    Merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Il faut que tu passes par les pointeurs de membres :

    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
     
     
    typedef void(MyClass::*parametre_fct)();
     
    void MyClass::analyse_parametre( const string & Param )
    {
        static map<string, parametre_fct> param_map;
     
        // initialiser la map si ce n'est pas fait
        if ( param_map.empty() )
        {
            param_map[ "/input" ] = &MyClass::parametre_input;
            param_map[ "/output" ] = &MyClass::parametre_output;
        }
     
        // rechercher la fonction associée à Param
        map<string, parametre_fct>::const_iterator i = param_map.find( Param );
        if ( i == param_map.end() )
        {
            // échec
            parametre_inconnu();
        }
        else
        {
            // appeler la fonction associée
            this->(i->second)();
        }
    }
     
    void MyClass:parametre_input()
    {
    // traitement inoput
    }
     
    void MyClass::parametre_output()
    {
    //traitement output
    }

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Par défaut
    Merci je test !

    Sinon autre question comment passer des parametres aux méthodes ainsi appellées ?

  4. #4
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Tu peux faire des pointeurs vers des fonctions membre qui ont des parametres.

Discussions similaires

  1. POO Appel dynamique à une méthode d'un objet
    Par thecanea dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/02/2011, 11h58
  2. [POO] Appel dynamique d'une méthode
    Par hollywood dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 16/12/2008, 12h27
  3. Réponses: 1
    Dernier message: 06/09/2008, 12h54
  4. Appel dynamique d'une méthode statique
    Par oneTime dans le forum Langage
    Réponses: 2
    Dernier message: 29/07/2008, 11h29

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