Boost logo

Boost :

From: Jonathan Turkanis (technews_at_[hidden])
Date: 2005-02-27 15:19:37

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

I plan to include a tee filter in the first released version of the library. It
should be slightly more efficient than the example.



#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 << "this gets written to both ostreams\n";

Boost list run by bdawes at, gregod at, cpdaniel at, john at