在用C ++编写stderr时调用函数?

时间:2013-01-20 22:18:57

标签: c++ c++11 assert stderr

有没有办法执行回调函数,或者只要将数据写入标准流(例如stderrstdout)就调用预定义函数?理想情况下,这可以用于允许应用程序正常输出printfstdoutfprintf用于其他FILE流,并有条件地执行其他任务as assert依赖于当前设置。当其他库输出到流时,这可能会自动触发此错误处理代码。

我知道可以使用stderrstdoutFILE的输出重定向到其他std::freopen句柄。实现提供此行为的备用FILE流是否切实可行,还是需要重新实现大量标准库函数?

符合标准的C ++建议(包括C ++ 11)将是首选,但我会在必要时向Windows开放解决方案。


我已经试图按照doomster的建议实施一个streambuffer,并得到James Kanze Filtering Streambufs的一点帮助。除非出现任何其他建议,否则这似乎是最接近原始建议的。它不会拦截C风格的输出,我怀疑它是不可能的或不切实际的,但它提供了我想要的所有功能。

1 个答案:

答案 0 :(得分:4)

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