我在这里看到了一个有用的开始:

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

09-27 02:32