Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+;中写入stderr时调用函数+;?_C++_C++11_Assert_Stderr - Fatal编程技术网

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()函数