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

  FORUM HardWare.fr
  Programmation
  C++

  Probleme de surcharge operateur <<

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de surcharge operateur <<

n°1897264
sigzegv
forcené
Posté le 20-06-2009 à 17:49:39  profilanswer
 

Je cherche a mettre en place une gestion de paramètres personnalisés au milieu des stringstream ( ou des ostream ).
 
Donc j'ai mis en place ce test pour constater la détection d'une valeur personnalisable :  
 

Code :
  1. #include <iostream>
  2. typedef enum
  3. {
  4. param
  5. } PARAM;
  6.   // surcharge 1
  7. std::ostream& operator<< ( std::ostream &o, PARAM param )
  8. {
  9. std::cout << " test de ( std::ostream &o, PARAM param ) " << std::endl;
  10. return o;
  11. }
  12.   // surcharge 2
  13. std::ostream& operator<< ( PARAM param, std::ostream &o  )
  14. {
  15. std::cout << " test de ( PARAM param, std::ostream &o  ) " << std::endl;
  16. return o;
  17. }
  18. int main()
  19. {
  20. PARAM p = param;
  21. std::stringstream s( " chaine de test " );
  22. std::cout << "debut " << s.str() << p << " fin" << std::endl;
  23.     return 0;
  24. }


 
Probleme, la surcharge 1 sur s.str() << p se déclenche effectivement bien, mais par contre ce qui m'interresse vraiment c de récupere la chaine qui vien apres "p", et la c le drame, je n'arrive pas a déclencher la surcharge 2, soit p << " fin" ...  
Donc je suppose que je m'y prend mal, comment dois je surcharger l'operateur << a ce niveau la ???

mood
Publicité
Posté le 20-06-2009 à 17:49:39  profilanswer
 

n°1897266
Joel F
Real men use unique_ptr
Posté le 20-06-2009 à 17:58:04  profilanswer
 

2 trucs :
1/ Pas sur que tu puisse surcharger les operator d'une enum. il faut que ton PARAM soit lui même une classe avec un operator<< qui gére les éléments qui lui succédent.
2/ Sinon, pour que ca marche, ton 1er parametre de operator<< devrait etres un PARAM&


Message édité par Joel F le 20-06-2009 à 17:59:53
n°1897274
sigzegv
forcené
Posté le 20-06-2009 à 18:43:40  profilanswer
 

En fait si c'est possible car si j'ajoute ceci  
 

Code :
  1. p << s;


 
ca déclenche bien la surcharge 2. Y'a juste qu'apparement elle refuse de se déclencher si y'a deja eu un ostream précédement dans la liste des surcharges.. J'y pige rien.

n°1897283
Joel F
Real men use unique_ptr
Posté le 20-06-2009 à 20:36:40  profilanswer
 

Voila ce qui se passe :

Code :
  1. os << p << "toto";


 
est résolu comme:

Code :
  1. (os << p) << "toto";


 
Or le (os<<p) renvoit un ostream et donc tu ne peut pas activer la bonne surcharge.
Mates comment std::hex et cie sont implantés.

n°1897285
Un Program​meur
Posté le 20-06-2009 à 20:38:14  profilanswer
 

Code :
  1. std::cout << "debut " << s.str() << p << " fin" << std::endl;


est à interpréter comme

Code :
  1. ((((std::cout << "debut" ) << s.str()) << p) << "fin" ) << std::endl;


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1897313
sigzegv
forcené
Posté le 20-06-2009 à 23:53:01  profilanswer
 

difficile de comprendre simplement comment sont implémenté les parametres des streams vu le fouillis que c'est dans les headers de la STL. Est-ce que quelqu'un serai en mesure de me fournir un résumé ?

n°1897338
Un Program​meur
Posté le 21-06-2009 à 08:36:00  profilanswer
 

Je ne comprends ta question... en passant, à part pour des choses simplissimes, regarder l'implémentation d'une bibliothèque pour comprendre comment l'utiliser n'est pas une bonne solution.
 
Si le contenu des bouquins d'introduction ou des références généralistes (Stroustrup, Jossutis) ne te suffit pas, la référence sur les streams, c'est Standard C++ IOStreams and Locales, Langer et Kreft, Addison-Wesley.


---------------
The truth is rarely pure and never simple (Oscar Wilde)

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

  Probleme de surcharge operateur <<

 

Sujets relatifs
Problème Doublons Ongletprobléme de numerotation des fichiers lors du download
probleme pour parser des dates [résolu]Problème java.lang.NullPointerException
Problème d'importation PhpMyAdminProbleme menu déroulant
problème surcharge opérateurProbleme de surcharge d'opérateur et de fonction amies
[C++] Problème de surcharge d'opérateurProbleme heritage/surcharge d'operateur
Plus de sujets relatifs à : Probleme de surcharge operateur <<


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