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 :

Fonction : Même prototype que std::cout


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 57
    Par défaut Fonction : Même prototype que std::cout
    Bonjour à tous !

    Je souhaite créer une fonction ayant le même prototype que la fonction std::cout.
    Je suis en présence d'un code déjà existant et souhaiterai implémenter un système de "verbose". Pour faire simple, j'espère pouvoir remplacer tous les "std::cout" du code existant par "mafonction".

    Un programme écrit comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::cout << "Bonjour" << " Monde !!!" << endl;
    Donnerai...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mafonction << "Bonjour" << " Monde !!!" << endl;
    Je ne sais pas si c'est possible. Si oui, je ne sais pas comment m'y prendre.
    Quelqu'un peut il me donner une piste sur l'écriture de "mafonction" ?

    Je vous remercie d'avance !

  2. #2
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    std::cout n'est pas une fonction mais un objet. Ce que tu veux faire c'est surcharger l'opérateur <<

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 57
    Par défaut
    D'accord.
    Dans ce cas que dis tu d'un truck comme ca :
    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
     
    ostream& operator << (ostream& flux, const MaClasseVerbose & verbose);
    {
         if( verbose.verboseMessage <= verbose.verboseLevel )
              cout << flux;
     
         return flux;
    }
     
    int main(void)
    {
         //Récupération des parametres et configuration du niveau verbose global
         MaClasseVerbose::setVerboseLevel(1);
     
         //Configuration du niveau de verbose pour le prochain affichage
         MaClasseVerbose::setVerboseMessage(0);
         MaClasseVerbose << "Ceci est un message de niveau 0" << endl;
    }

  4. #4
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Mais dans ce cas, comment faire pour surcharger l'opérateur << et autoriser un nombre indéfini de paramètres et de types ?
    Ce n'est pas une fonction avec un nombre indéfini de paramètre, tu dois la surcharger pour tout les types que tu veux projeter sur un flux.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 57
    Par défaut
    Petit croisement de post...

    Voir dernier message svp Merci

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 57
    Par défaut
    Après avoir fouiner un minimum de documentation, j'en viens à écrire la classe suivante :

    Verbose.h
    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
     
    class Verbose
    {
            private:
                    //Pour "setter" le niveau de verbose du programme
                    static int      _verboseLevel;
                    //Pour "setter" le niveau de verbose de la prochaine chaine à afficher
                    static int      _messageLevel;
     
            public:
                    static void     setVerboseLevel(int verboselevel);
                    static int      getVerboseLevel();
                    static void     setMessageLevel(int messageLevel);
                    static int      getMessageLevel();
                    std::ostream &  operator<<(std::ostream & stream);
    };
    Verbose.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    std::ostream & operator<<(std::ostream & stream, const AudioCoreVerbose & audioCoreVerbose)
    {
            //Si le niveau verbose de la chaine est inférieur à celui du programme
            if(audioCoreVerbose.getMessageLevel() <= audioCoreVerbose.getVerboseLevel())
                    //On affiche la chaine
                    std::cout << stream;
     
            return stream;
    }
    main.cpp
    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
     
    int main(void)
    {
            Verbose::setVerboseLevel(1);
     
            Verbose::setMessageLevel(0);
            //error: expected unqualified-id before ‘<<’ token
            Verbose << "Message niveau 0" << endl;
     
            Verbose::setMessageLevel(1);
            //error: expected unqualified-id before ‘<<’ token
            Verbose << "Message niveau 1" << endl;
     
            Verbose::setMessageLevel(2);
            //error: expected unqualified-id before ‘<<’ token
            Verbose << "Message niveau 2" << endl;
     
            return 0;
    }
    Il me manque quelque chose que je ne comprend pas, j'obtiens l'erreur de compilation suivante :
    error: expected unqualified-id before ‘<<’ token

    Quelqu'un a t-il une idée ?

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

Discussions similaires

  1. std::cout codeblock même si je mets #include <iostream>
    Par emykev22 dans le forum Débuter
    Réponses: 7
    Dernier message: 15/07/2014, 16h47
  2. Passage d'une fonction en tant que paramètre
    Par bagnolm dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2006, 15h58
  3. [VS2005][C#] Construire une flèche du même genre que Visio
    Par pocket dans le forum Windows Forms
    Réponses: 11
    Dernier message: 16/03/2006, 09h33
  4. [XHTML] xhtml - Une division de même hauteur que le reste
    Par TommyWeb dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 11/02/2006, 18h31
  5. Comment fermer l'application en même temps que Windows ?
    Par semaj_james dans le forum Langage
    Réponses: 4
    Dernier message: 23/06/2004, 22h17

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