gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:14:13 30 4
gpt4 key购买 nike

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

我使用的是 Visual Studio 2008。我在 Google Groups: redirect cout to file 看到了帖子,这似乎完全符合我的要求。唯一的问题是代码无法编译。我在 ->overflow() 和 ->sync() 方法调用中收到 C2248 错误“无法访问 protected 成员”。

有人知道如何让这段代码编译吗?或者同时将 cout 重定向到控制台和文件的替代方法?

最佳答案

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;
}

示例调用:

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$

关于c++ - 自定义 C++ cout 类 - 输出到控制台和日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5942229/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com