我在这里看到了一个有用的开始:
http://www.cs.technion.ac.il/~imaman/programs/teestream.html
并且它非常适合制作一个新的流,该流同时发送到日志和日志文件。
但是,如果我尝试将clog重新定义为新流,则该命令将不起作用,因为新流的rdbuf()与clog相同,因此以下操作无效:
clog.rdbuf(myTee.rdbuf());
那么,如何修改tee类使其具有自己的rdbuf(),然后使其成为阻塞的目标?
谢谢。
-威廉
最佳答案
如果您确实想继续为发球台使用std::clog而不是将输出发送到其他流,则需要将工作级别降低一点:不是从ostream派生而是从streambuf派生。然后,您可以执行以下操作:
fstream logFile(...);
TeeBuf tbuf(logFile.rdbuf(), clog.rdbuf());
clog.rdbuf(&tbuf);
有关如何派生自己的streambuf类的更多信息,请参见here。