дублирующий std :: ofstream добавленный контент - PullRequest
4 голосов
/ 21 апреля 2011

Я использую std :: ofstream для вывода трассировки.

По некоторым причинам я иногда хочу дублировать то, что я добавил в конец std :: ofstream (который еще не очищен или не закрыт), в другой std :: ofstream;

Думаете ли вы о каком-либо пути достижения этого?

Thx

1 Ответ

7 голосов
/ 21 апреля 2011

Фильтр Tee из Boost.Iostreams может разделить выходной поток на два.

Вот пример, вдохновленный примером, данным ЙоханнесомШауб в своем ответе здесь .

#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() возвращает пустую строку.Я не знаю, является ли это ожидаемым поведением.

...