[flux] créer un flux nul ou un flux fictif

créer un flux nul ou un flux fictif [flux] - C++ - Programmation

Marsh Posté le 07-11-2004 à 19:34:27    

Bonsoir à tous et d'avance, désolé pour la longueur de ce post !
 
  J'écris en ce moment une surcouche aux flux standards du C++ pour gérer l'UNICODE et un format personnel ('infotexte'). La classe infotexte peut s'utiliser pour la lecture seule ou pour la lecture et l'écriture.
 


                        Voici ma hiérarchie de classes :
                 
 (couche système)      istream       ostream
                          .            .
 (ma couche unicode)   flux_in      flux_out
                          .            .
                          ..............
                                 .
 (ma couche infotexte)       infotexte
 


 
  Le problème apparaît avec les constructeurs prévus pour la lecture seule (j'ai donc supprimé les autres constructeurs et beaucoup simplifié le code). Dans ce cas flux_out ne me sert à rien et j'ai donc créé un constructeur-bidon... Mais comment initialiser ostream ?
 

Code :
  1. // Classes de bases pour gérer l'UNICODE :
  2.     class flux_in : public istream
  3.     {
  4.           flux_in(const char* fic_in);
  5.     };
  6.     flux_in::flux_in(const char* fic_in) : istream(0)
  7.     { // [...] Initialisation de l'istream à partir du fichier  
  8.       // je termine par un  
  9.       ios::init(&ficbuff_in);
  10.     }
  11.     class flux_out : public ostream
  12.     {
  13.           flux_out(void); // Mon constructeur bidon.
  14.           // flux_out(const char* fic_out) // Autre constructeur.
  15.     };
  16.     flux_out::flux_out(void) : ostream(0) // ????????????????????<= Problème (?)
  17.     { // Pas d'initialisation pour ce constructeur.
  18.     }
  19.     // Classe INFOTEXTE pour gérer les textes selon un format de mon cru  
  20.     class infotexte : public flux_in, public flux_out
  21.     {
  22.           // Ouverture d'un fichier pour la lecture seulement
  23.           infotexte(const char * fic);
  24.     };
  25.     infotexte::infotexte(const char * fic) : flux_in(fic), flux_out()
  26.     {}


 
    Quand je crée une instance de classe infotexte pour la lecture seule, le constructeur de flux_in est d'abord appelé et il ouvre correctement le fichier passé en argument. Puis le constructeur-bidon flux_out est appelé et ne fait rien. Mais quand le constructeur infotexte reprend la main, je me rend compte que mon flux d'entrée est fichu (rdstate() me renvoie badbit).
   Je crois que c'est le fait d'appeler ostream(0) comme je le fais qui provoque une erreur. Si vous aviez une solution pour diriger ce flux vers un flux nul sans créer d'erreurs, merci beaucoup.


Message édité par suizokukan le 07-11-2004 à 19:38:57
Reply

Marsh Posté le 07-11-2004 à 19:34:27   

Reply

Marsh Posté le 07-11-2004 à 22:52:57    

Voici une adresse à laquelle une réponse a déjà été donnée (en anglais) :
 
 http://coding.derkeiler.com/Archiv [...] /1049.html  
 
  Merci à tous ceux qui ont lu mon poste !


Message édité par suizokukan le 07-11-2004 à 22:53:44
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed