我不知道是否可以这样做。我希望存储程序各个部分的输出,以便我加载保存的数据并首先显示它的打印方式。
我知道这在某种程度上可能很简单,但我只是想知道是否有一种非常简单的方法可以实现这一点,并添加到现有程序中。如果我可以指定一个代码区域,其中打印到屏幕的所有输出也插入到文本文件中并保存,那将是很好的。我应该看一下加速库吗?
答案 0 :(得分:4)
您可以创建一个流缓冲区,该缓冲区会写入多个其他流并将其安装到std::cout
中。基本上,这看起来像这样:
#include <streambuf>
struct teebuf:
std::streambuf
{
teebuf(std::streambuf* sb0, std::streambuf* sb1): sb0_(sb0), sb1_(sb1) {}
int_type overflow(int_type c) {
this->sb0_->sputc(c);
this->sb1_->sputc(c);
return traits_type::not_eof(c);
}
int sync() {
this->sb0_->pubsync();
this->sb1_->pubsync();
return 0;
}
std::streambuf* sb0_;
std::streambuf* sb1_;
};
#include <iostream>
#include <fstream>
int main() {
std::ofstream file("file.log");
teebuf tee(std::cout.rdbuf(), file.rdbuf());
std::streambuf* orig(std::cout.rdbuf());
std::cout.rdbuf(&tee);
std::cout << "hello, world!\n";
std::cout.rdbuf(orig);
}
有关其工作原理的详细信息,您可以查看我在comp.lang.c++ and comp.lang.c++.moderated中撰写的文章(有多篇文章,已有十多年了......)。