自定义C++ cout类 - 输出到控制台和日志文件

Jas*_*ger 8 c++ console cout stdout

我正在研究一个大量使用"cout << strSomething"的程序.将信息记录到控制台.我需要修改程序,以便所有控制台输出都转到控制台和文件.虽然我可以修改代码中的"cout <<",但是有几个大的第三方库也使用"cout <<"; 这些库由于其许可证而无法修改 - 因此修改对"cout <<"的所有引用都不是解决方案.此外,由于执行命令行的方式,不可能使用"wtee.exe".

我正在使用Visual Studio 2008.我已经在Google网上论坛上发帖了:将cout重定向到文件,这似乎完全符合我的要求.唯一的问题是代码不会编译.我在 - > overflow()和 - > sync()方法调用上得到C2248错误"无法访问受保护的成员".

有谁知道如何编译这段代码?或者同时将cout重定向到控制台和文件的另一种方法?

Sam*_*ler 12

boost::iostreams::tee_device是为此而做的

#include <boost/iostreams/stream.hpp>
#include <boost/iostreams/tee.hpp>

#include <fstream>
#include <iostream>

int
main()
{
    typedef boost::iostreams::tee_device<std::ostream, std::ofstream> Tee;
    typedef boost::iostreams::stream<Tee> TeeStream;

    std::ofstream file( "foo.out" );
    Tee tee( std::cout, file );

    TeeStream both( tee );

    both << "this goes to both std::cout and foo.out" << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

示例调用:

samm$ ./a.out
this goes to both std::cout and foo.out
samm$ cat foo.out
this goes to both std::cout and foo.out
samm$ 
Run Code Online (Sandbox Code Playgroud)


Tro*_*our 1

调用sync可以替换为pubsync. 至于overflow电话,我认为这可能是一个错字。因为看起来应该是对 的调用sputc