C++ 如何将std::of流重定向到std::cout?
我正在处理一些使用全局调试记录器的代码,该记录器的类型为C++ 如何将std::of流重定向到std::cout?,c++,c++11,stl,cout,ofstream,C++,C++11,Stl,Cout,Ofstream,我正在处理一些使用全局调试记录器的代码,该记录器的类型为std::ofstream*。我想把它重定向到std::cout,因为我在实时使用代码,而不是为其设计的批处理方法 是否可以将它使用的全局std::ofstream*指针重定向到std::cout?我知道std::ofstream继承自std::ios,它允许使用rdbuf()方法更改流缓冲区,但不幸的是,std::ofstream重新定义了rdbuf()方法,这使得以下代码无法编译: gOsTrace = new std::ofstrea
std::ofstream*
。我想把它重定向到std::cout,因为我在实时使用代码,而不是为其设计的批处理方法
是否可以将它使用的全局std::ofstream*
指针重定向到std::cout
?我知道std::ofstream
继承自std::ios
,它允许使用rdbuf()
方法更改流缓冲区,但不幸的是,std::ofstream
重新定义了rdbuf()
方法,这使得以下代码无法编译:
gOsTrace = new std::ofstream();
gOsTrace->rdbuf(std::cout.rdbuf());
是否有其他方法将gOsTrace
对象重定向到cout
?具体IOStream流类的rdbuf()
方法隐藏在std::ios
中声明的方法。为了找到基类重载,您需要显式限定:
gOsTrace->basic_ios<char>::rdbuf(std::cout.rdbuf());
gOsTrace->basic_ios::rdbuf(std::cout.rdbuf());
记录器是否必须使用std::ofstream*
它不能是更通用的std::ostream*
。然后,您所要做的就是用新的stream.std::ios::tie为这个指针赋值@SeverinPapadeux所做的只是偶尔冲洗一下。例如,当有输入操作时,std::cin
会刷新std::cout
。不幸的是,因为它不是我的代码(我只是链接到它,修改的能力有限),我不愿意更改记录器类型,特别是考虑到它是在许多地方使用的全局类型,所以简短的答案是否定的,记录器不能是更通用的std::ostream…您的示例代码是非法的,new
给出了一个指针,但是您在itThanks上使用了
!这很有效。但是应该注意的是,除非ofstream成功地打开一个文件进行写入,否则它实际上不会重定向到std::cout。也就是说,我的代码中的默认构造函数不会重定向。