C++函数cout重定向到文件

C++ function cout redirect to file

假设我有一个名为 print 的简单函数,它有一个使用 cout 将 1-5 打印到控制台的循环。

有什么方法可以做类似的事情:

file << print ();

要将 print 的输出保存到文件中?显然假设我使用 ofstream 正确打开文件,以及所有内容。

假设 print 是一个 void 函数,其输出硬编码为 cout,您无能为力:输出将由执行环境的分配控制输出流的(默认控制台或使用 >myoutput.txt 的文件重定向)。

如果您希望您的程序控制输出的位置,请将 ostream& 传递给您的 print 函数,并将其用于输出:

void print(ostream& ostr) {
    // use ostr instead of cout
    ostr << "hello, world!" << endl;
}

如果要print输出到控制台或默认输出,调用

print(cout);

如果你想让它写入一个文件,做一个ofstream,然后把它传递给print:

ofstream file("hello.txt");
print(file);

"Is there a way?":不...不更改 print() and/or 在调用方中添加更多代码。当你说...

file << print();

...发送到文件流的是 return 由 print() 编辑的内容。正如您所说 print() 正在将所需的输出发送到 std::cout,return 值表面上不会包含我们在 file 中想要的任何内容,因此除非它是一个空字符串调用者最好不要写 file << print();.

相反,调用者应该在调用 print() 之前将输出转移到 coutfileJames' answer here 展示了如何做到这一点。