我正在使用std :: ofstream进行跟踪输出。
出于某些原因,我有时想要将我在std :: ofstream末尾附加的内容(尚未刷新或关闭)重复到另一个std :: ofstream;
您是否想过实现这一目标的任何方式?
THX
答案 0 :(得分:7)
来自Tee的Boost.Iostreams过滤器可以将输出流拆分为两个。
这里的一个例子很大程度上受到Johannes Schaub在答案中here给出的答案的启发。
#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";
}
当我省略flush操纵器时,ss.str()
返回一个空字符串。我不知道这是否是预期的行为。