Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3087 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  surcharge operator<<

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

surcharge operator<<

n°1141158
tanguy
Posté le 05-07-2005 à 18:52:34  profilanswer
 

J'essaye desesperemment de creer une classe qui agisse comme std::cout.
 

Code :
  1. class Logger {
  2. public:
  3. enum Level {
  4.  Debug,
  5.  Info,
  6.  Warn,
  7.  Error,
  8.  Fatal
  9. };
  10. Logger() {
  11. }
  12. void operator<<(std::ostream & os) {
  13.  std::ostringstream ostr;
  14.  ostr << os;
  15.  log(Level::Debug, ostr.str());
  16. }
  17. friend std::ostream & operator<<(std::ostream & os, Logger & logger) {
  18.  return os;
  19. }
  20. void log(Level level, const std::string & message) {
  21.  ...
  22. }
  23. };


 
Je voudrais obtenir ceci comme syntax:
 

Code :
  1. Logger logger;
  2. logger << "erreur blabla: " << x << y;
  3. //syntax moins sympa que je voudrais eviter:
  4. logger.log(Level::Debug, "erreur blabla: " + itoa(x) + itoa(y));


 
J'ai essaye pas mal de trucs et je comprends pas comment surcharger l'operator<< pour que Logger fonctionne comme un ostream (j'ai aussi essaye l'heritage et je n'y arrive pas non plus).
Si quelqu'un maitrise les iostreams je lui en serai reconnaissant !

mood
Publicité
Posté le 05-07-2005 à 18:52:34  profilanswer
 

n°1141213
Taz
bisounours-codeur
Posté le 05-07-2005 à 19:46:18  profilanswer
 

ça manque de const tout ça. vire tes itoa. pas standard, UB avec ton utilisation.

n°1141214
Taz
bisounours-codeur
Posté le 05-07-2005 à 19:46:42  profilanswer
 

et fais une recherche sur forum, on a déjà donné des exemples de manipulation et autre trucs

n°1141222
Taz
bisounours-codeur
Posté le 05-07-2005 à 19:59:51  profilanswer
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. struct Foo{};
  4. class FooBinaryWriter
  5. {
  6. public:
  7.   explicit FooBinaryWriter(const Foo &f):
  8.     foo(f)
  9.   {}
  10.   inline ostream & operator()(ostream &os) const
  11.   {
  12.     os <<  " *** j\'ecris *** ";
  13.     // et des trucs binaires avec os.write
  14.     // cette classe peut être amie de Foo
  15.     return os;
  16.   }
  17. private:
  18.   const Foo &foo;
  19. };
  20. ostream& operator<<(ostream &os, const FooBinaryWriter &fbw)
  21. {
  22.   return fbw(os);
  23. }
  24. inline FooBinaryWriter FBW(const Foo &f)
  25. {
  26.   return FooBinaryWriter(f);
  27. }
  28. class Log
  29. {
  30. public:
  31.   Log():
  32.     os(0)
  33.   {}
  34.  
  35.   inline void bind(ostream *o) const
  36.   {
  37.     os=o;
  38.     header();
  39.   }
  40.   void header() const
  41.   {
  42.     *os << "Beginning of message *** ";
  43.   }
  44.   void footer() const
  45.   {
  46.     *os << " *** End of message" << endl;
  47.   }
  48.   ~Log()
  49.   {
  50.     footer();
  51.   } 
  52. private:
  53.   mutable ostream *os;
  54. };
  55. ostream& operator<<(ostream &os, const Log &l)
  56. {
  57.   l.bind(&os);
  58.   return os;
  59. }
  60. inline ostream& hello(ostream &os)
  61. {
  62.   os << "Hello World!\n";
  63.   return os;
  64. }
  65.  
  66. int main()
  67. {
  68.   Foo f;
  69.   cout << "Hello" << FBW(f) << "world" << endl;
  70.   cout << Log() << "message = " << 3.141516 << "\tbye";
  71.   cout << hello;
  72. }

j'ai retrouvé ça, c'est une bonne piste pour débuter


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  surcharge operator<<

 

Sujets relatifs
C++ operator << pour les ofstream[c++] Bool operator <
Constructeur de copie, agrégation et surcharge de "="Classe abstraite et operator<<
[C#] Problème de surcharge [RESOLU]surcharge de l'operateur []
Surcharge de template et visual C++ .NETclass, surcharge, incompréhension.
Plus de sujets relatifs à : surcharge operator<<


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR