
Brian Braatz wrote:
However, I am NOT (yet) an expert in the Iostreams library so please excuse me if I am missing something obvious.
I add 2 sinks
filtering_ostream out; out.push(file_sink("Report.txt")); out.push(cout);
I get an exception thrown on the second one (regardless of which one goes in first)
This is true. A chain can only contain one device.
In searching the archives, I noticed this mail:
<snip description of 'tee' filter> I apparently didn't test that code, because it contained two errors (write takes a const char* instead of a char*, and only multi-character filters implement write() instead of put()). At the end of this message is an updated and tested version. I plan to include a tee filter in the first released version of the library. It should be slightly more efficient than the example. Jonathan -------------- #include <boost/iostreams/concepts.hpp> #include <boost/iostreams/filtering_stream.hpp> #include <fstream> #include <iostream> struct tee : boost::iostreams::multichar_output_filter { tee(std::ostream& dest) : dest(dest) { } template<typename Sink> void write(Sink& snk, const char* s, std::streamsize n) { // Write to the downstream Sink boost::iostreams::write(snk, s, n); // Write to the stored ostream: dest.write(s, n); } std::ostream& dest; }; int main() { using namespace boost::iostreams; std::ofstream log("C:/log.txt"); filtering_ostream out; out.push(tee(log)); out.push(std::cout); out << "this gets written to both ostreams\n"; }