Я хотел бы создать два (или более) потока в один. Моя цель заключается в том, что любой вывод, направленный на cout
, cerr
и clog
, также выводится в файл вместе с исходным потоком. (Например, когда делаются записи на консоль, например, после закрытия, я хотел бы по-прежнему иметь возможность вернуться и просмотреть вывод.)
Я думал сделать что-то вроде этого:
class stream_compose : public streambuf, private boost::noncopyable
{
public:
// take two streams, save them in stream_holder,
// this set their buffers to `this`.
stream_compose;
// implement the streambuf interface, routing to both
// ...
private:
// saves the streambuf of an ios class,
// upon destruction restores it, provides
// accessor to saved stream
class stream_holder;
stream_holder mStreamA;
stream_holder mStreamB;
};
Что кажется достаточно прямым. В главном вызове будет что-то вроде:
// anything that goes to cout goes to both cout and the file
stream_compose coutToFile(std::cout, theFile);
// and so on
Я также посмотрел boost::iostreams
, но не видел ничего связанного.
Есть ли другие лучшие/более простые способы для этого?