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 :

Flux de sortie, détéction de début et fin de commande, opérateur <<


Sujet :

Langage C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Flux de sortie, détéction de début et fin de commande, opérateur <<
    Bonjour,

    Je souhaiterais implémenter un équivalent de std::cout qui gére l'affichage des méssages d'erreur de mon programme. Je voudrais par exemple avoir une instance d'une classe qu'il ai donc pour l'utilisateur une syntaxe du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class ErrorDriver {
      ...
    };
     
    ErrorDriver err;
     
    err << "le message d'erreur, par exemple la variable i prend la valeure " << i << " alors qu elle devrait prendre la valeure  " << j << endl;
    la différence avec std::cout c'est que je veux pouvoir pour une telle ligne de message d'erreur est que je veux pouvoir executer du code au niveau du premier << de la ligne et juste avant le ; de fin de commande. Par exemple, je veux que mon objet err m'écrive automatiquement une entète au message d'erreur (par exemple "ERROR: ") et me fasse un abort() à la fin de la ligne (en général, mon programme n'a pas lieu de continuer si il y a une erreur). Je voudrais aussi pouvoir mettre dans cette ligne de message d'erreur des classes (par exemple ici pour i et j) pour lesquel j'ai surchargé l'opérateur <<:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class A {
       ...
    };
     
    std::ostream &operator<< (std::ostream &os, A &a);
    Est ce que vous pensez que c'est possible et si oui, comment?

    Merci d'avance!

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Une solution est de rester sur les flux standards et de créer tes propres 'manipulateurs' (qui ne sont que des pointeurs de fonctions appelées par le flux) :
    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
    #include <iostream>
     
    std::ostream& starting_log ( std::ostream& str_ )
    {
       return str_<<"ERROR : ";
    }
     
    #include <exception>
    #include <stdexcept>
    std::ostream& ending_log ( std::ostream& )
    {
       throw std::logic_error("error") ;
    }
     
     
    int main()
    {
       try
       {
           std::clog<<starting_log<<"problem"<<ending_log;
       }
       catch(std::exception const&ex_)
       {
          std::cerr<<"\n"<<ex_.what()<<"\n";
       }
        return 0;
    }
    Pour du plus costaud, je te recommanderais de jeter un coup d'oeil à Boost.Iostreams.

    Ceci dit, vue du flux, difficile de savoir qui est le premier << et le ; :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    err << "le message d'erreur, par exemple la variable i prend la valeure " << i << " alors qu elle devrait prendre la valeure  " << j << endl;
    // vs
    err << "le message d'erreur, par exemple la variable i prend la valeure ";
    err << i ;
    err << " alors qu elle devrait prendre la valeure  ";
    err << j;
    err << endl;

Discussions similaires

  1. transférer une valeur du début à la fin
    Par arti2004 dans le forum Langage
    Réponses: 12
    Dernier message: 24/05/2006, 18h19
  2. Traiter les flux de sortie
    Par soulhouf dans le forum Linux
    Réponses: 9
    Dernier message: 20/04/2006, 17h48
  3. [Java 1.5] Process : afficher le flux de sortie
    Par Zapan dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 11/01/2006, 10h34
  4. [MySQL] Flux de sortie : ob_start + header
    Par ToxiZz dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/12/2005, 23h56
  5. Awk - changer le flux de sortie
    Par Longrais dans le forum Linux
    Réponses: 1
    Dernier message: 16/08/2005, 17h11

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