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 :

Transfert d'arguments variables


Sujet :

Langage C++

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut Transfert d'arguments variables
    Bonjour a tous,

    J'ai une methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double DataManager::getValue( int nb , ... );
    Je souhaite rajouter un niveau dans son utilisation sans avoir a utiliser sa liste d'arguments:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    double Manager::getValue( string aDataMan, int nb , ... )
    {
        double dRes = 0;
        if ( exist(aDataMan) )
        {
            // getDataMan renvoie un DataManager
            sRes = getDataMan(aDataMan)->getValue(int nb , ... );
        }
        return dRes;
    }
    Comment peux on transmettre une liste d'argument variable ??

    Merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 274
    Points : 176
    Points
    176
    Par défaut
    C'est possible regarde du côté des template variadic.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je ne connais pas les constructs appropriés en C++, mais en C on utilise les va_list. Le problème, c'est que ça exige que tous les composants concernés exposent au moins une version va_list de la méthode voulue:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <cstdarg>
     
    double DataManager::getValue( int nb , ... );
    double DataManager::getValueV( int nb , va_list ap ); //J'ignore pourquoi on l'appelle traditionnellement "ap"

    Code C++ : 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
    #include <cstdarg>
     
    double Manager::getValueV( string aDataMan, int nb , va_list ap )
    {
        double dRes = 0;
        if ( exist(aDataMan) )
        {
            // getDataMan renvoie un DataManager
            sRes = getDataMan(aDataMan)->getValue(int nb , ap );
        }
        return dRes;
    }
     
    double Manager::getValue( string aDataMan, int nb , ... )
    {
        va_list ap;
        va_start(ap, nb);
        double ret = getValueV( aDataMan, nb, ap);
        va_end(ap);
        return ret;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. transfert d'une variable string vers rapport RAVE
    Par segnac dans le forum Bases de données
    Réponses: 4
    Dernier message: 30/11/2013, 07h24
  2. [Tableaux] Transfert d'arguments
    Par Ricou13 dans le forum Langage
    Réponses: 5
    Dernier message: 27/03/2006, 21h42
  3. Réponses: 4
    Dernier message: 31/10/2005, 17h48
  4. Macros et nombre d'arguments variable
    Par kaisse dans le forum C
    Réponses: 7
    Dernier message: 28/07/2005, 10h10
  5. Nombre d'arguments variable
    Par gege2061 dans le forum C
    Réponses: 7
    Dernier message: 05/08/2004, 15h43

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