2009-05-04 5 views
2

Я думал о «цепочке» пары C++ iostreams toghether для фильтрации ввода дважды. Я использую gzstreams для чтения сжатых файлов zlib, и я думал о кодировании потока, который читает из потока и выполняет преобразования кодировки. Возможно, передав открытый поток в качестве параметра конструктора ... Как вы думаете, что это может быть лучше всего выполнено?chaining C++ streams

+0

Что вы подразумеваете под «цепью»? – 2009-05-04 06:58:40

+0

Как eed3si9n отправлено, так же, как boost :: фильтр iostreams. Но мне было интересно, если бы это был хороший дизайн, чтобы сделать это сам, передав ранее открытый поток в свой собственный конструктор классов, полученный из public std :: streambuf или с помощью другого подхода. – piotr

ответ

6

Я не использовал это, но помощь filtering_stream может помочь.

В качестве примера я нашел a mailing list post с indent.hpp, который реализует выходной фильтр, который делает отступ выхода:

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

и использовать его как так:

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

который будет результат:

Hello Filter! 
    this is 
    indented 
until here