gpt4 book ai didi

c++ - 是否有用于写入 STDOUT 或文件的 C++ 习惯用法?

转载 作者:行者123 更新时间:2023-12-02 09:47:53 25 4
gpt4 key购买 nike

我正在编写一个命令行工具,我希望它默认写入 STDOUT,但如果指定则写入文件。我试图通过使用输出流来保持用于写入输出的接口(interface)一致的方式来做到这一点。
这是我的第一个想法:

#include <iostream>

int main(int argc, char* argv[]) {
std::ostream* output_stream = &std::cout;

// Parse arguments

if (/* write to file */) {
std::string filename = /* file name */;

try {
output_stream = new std::ofstream(filename, std::ofstream::out);
} catch (std::exception& e) {
return 1;
}
}

// Possibly pass output_stream to other functions here.
*output_stream << data;

if (output_stream != &std::cout) {
delete output_stream;
}

return 0;
}
我不喜欢有条件地删除输出流。这让我认为必须有更好的方法来做同样的事情。

最佳答案

一个简单的方法是写入标准输出,如果需要,让用户使用 shell 重定向将输出发送到文件。
如果你想在你的代码中实现它,我能想到的最直接的方法是在一个接受输出流的函数中实现你的程序主体:

void run_program(std::ostream & output) {
// ...
}
然后你可以用 std::cout有条件地调用这个函数。或文件流:
if (/* write to file */) {
std::ofstream output{/* file name */};
run_program(output);
} else {
run_program(std::cout);
}

关于c++ - 是否有用于写入 STDOUT 或文件的 C++ 习惯用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63650783/

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