C++ 在C+;中写入stderr时调用函数+;?
当数据写入标准流(如C++ 在C+;中写入stderr时调用函数+;?,c++,c++11,assert,stderr,C++,C++11,Assert,Stderr,当数据写入标准流(如stderr或stdout)时,是否有方法执行回调函数或以其他方式调用预定义函数?理想情况下,这可以用于允许应用程序在其他文件流的stdout或fprintf情况下正常输出printf,并根据当前设置有条件地执行附加任务,例如断言。这样做的好处是,当其他库输出到流时,会自动触发此错误处理代码 我知道,stderr和stdout的输出可以使用std::freopen重定向到其他文件句柄。实现提供此行为的备用文件流是可行的,还是需要重新实现大量标准库函数 标准的C++建议(包括C
stderr
或stdout
)时,是否有方法执行回调函数或以其他方式调用预定义函数?理想情况下,这可以用于允许应用程序在其他文件流的stdout
或fprintf
情况下正常输出printf
,并根据当前设置有条件地执行附加任务,例如断言。这样做的好处是,当其他库输出到流时,会自动触发此错误处理代码
我知道,stderr
和stdout
的输出可以使用std::freopen
重定向到其他文件
句柄。实现提供此行为的备用文件流是可行的,还是需要重新实现大量标准库函数
标准的C++建议(包括C++ 11)将是首选,尽管如果需要的话,我将只对Windows开放的解决方案开放。
在James Kanze的一点帮助下,我尝试实现了由提出的streambuffer。除非提出任何其他建议,否则这似乎是最接近原始建议的。它不会截取C风格的输出,我怀疑这是不可能的或不实际的,但它提供了我想要的所有功能。您可以替换streambuffer以截取这些流的任何输出,请参阅rdbuf()函数。我认为您只需要在streambuffer类中实现overflow()函数