2009-05-04 10 views
2

Je pensais "enchaîner" deux iostreams C++ ensemble pour filtrer l'entrée deux fois. J'utilise gzstreams pour lire les fichiers compressés en zlib et je pensais coder un flux qui lit à partir d'un flux et effectue des conversions d'encodage. Peut-être en passant un flux ouvert comme paramètre constructeur ... Comment pensez-vous que cela pourrait être mieux accompli?chaînage des flux C++

+0

Qu'entendez-vous par "chaînage"? –

+0

Comme eed3si9n posté, un peu comme boost :: filtre iostreams. Mais je me demandais si ce serait une bonne conception de le faire soi-même en passant un flux précédemment ouvert à votre constructeur de classe personnalisé dérivé du public std :: streambuf ou avec une autre approche. – piotr

Répondre

6

Je ne l'ai pas utilisé mais filtering_stream peut aider.

À titre d'exemple, j'ai trouvé a mailing list post avec indent.hpp, qui met en oeuvre un filtre de sortie qui indente sorties:

boost::iostreams::filtering_ostream out; 
indent_filter::push(out,2); 
out.push(std::cout); 

et de l'utiliser comme ceci:

out << "Hello Filter!\n" 
    << indent_in 
    << "this is\n" 
    << "indented\n" 
    << indent_out 
    << "until here\n" 
    ; 

qui résultat en sortie:

Hello Filter! 
    this is 
    indented 
until here