4

有没有办法执行回调函数,或者在将数据写入标准流(例如stderr或)时调用预定义函数stdout?理想情况下,这可用于允许应用程序在其他流的情况下正常输出,并printf有条件地执行附加任务,例如依赖于当前设置的断言。当其他库输出到流时,这可能具有自动触发此错误处理代码的好处。stdoutfprintfFILE

我知道输出到stderr并且stdout可以FILE使用std::freopen. 实现提供这种行为的备用FILE流是否可行,还是需要重新实现大量标准库函数?

符合标准的 C++ 建议(包括 C++11)将是首选,但如有必要,我会只接受 Windows 解决方案。


从那以后,我尝试按照 doomster 的建议实现流缓冲区,并在James Kanze的Filtering Streambufs提供了一点帮助。除非出现任何其他建议,否则这似乎是您可以获得的最接近原始建议的方法。它不会拦截 C 风格的输出,我怀疑这是不可能或不切实际的,但它提供了我想要的所有功能。

4

1 回答 1

4

您可以替换流缓冲区以拦截这些流的任何输出,请参阅 rdbuf() 函数。我想你只需要在streambuffer类中实现overflow()函数。

于 2013-01-20T22:20:19.823 回答