4

トレース出力にstd::ofstreamを使用しています。

いくつかの理由で、std :: ofstreamの最後に追加したもの(まだフラッシュまたはクローズされていない)を別のstd::ofstreamに複製したい場合があります。

これを達成する方法を考えますか?

どうも

4

1 に答える 1

7

Boost.IostreamsTeeフィルターは、出力ストリームを2つに分割できます。

これは、ヨハネス・シャウブがここでの回答で示したものに大きく影響を受けた例です。

#include <sstream>
#include <iostream>
#include <boost/iostreams/stream.hpp>
#include <boost/iostreams/tee.hpp>

int main()
{
    namespace io = boost::iostreams;
    typedef io::tee_device<std::ostream, std::stringstream> TeeDevice;
    typedef io::stream<TeeDevice> TeeStream;
    std::stringstream ss;
    TeeDevice teeDevice(std::cout, ss);
    TeeStream tee(teeDevice);
    tee << "Hello World\n" << std::flush;
    std::cout << "ss: " << ss.str() << "\n";
}

フラッシュマニピュレータを省略するとss.str()、空の文字列が返されます。これが期待される動作であるかどうかはわかりません。

于 2011-04-21T14:06:06.190 に答える