【发布时间】:2018-08-23 15:30:34
【问题描述】:
我正在处理的程序的一个限制是它应该被调用为:./a.out < input.txt > output.txt。该程序的输入应从第一个文件中读取,输出应写入第二个文件。
因此,这会将标准输入和输出从这两个文件重定向到这两个文件。例如,我可以简单地从main() 致电std::cin 和std::cout。但是,我有一个专用组件,它可以将我从文件中的输入调整为我在程序中其他地方使用的中间结构。
为了构建这个结构,我可以在这个组件中使用#include <iostream> 并从input.txt 读取std::cin。但是,我不喜欢在此处包含 iostream 的想法,而且我不确定如何测试它。
我的问题来自 I/O 重定向,如果使用文件名作为字符串调用可执行文件,我会按照
InputAdapter inputAdapter;
ifstream infile;
infile.open(filename ,std::ios_base::in);
auto structHoldingParsedInput = inputAdapter.adapt(infile);
我怎样才能在这里实现类似的目标?
【问题讨论】:
-
“我不喜欢在此处包含 iostream” - 为什么?它会立即解决您的问题。
-
您只需要
std::istream&参数。我可能没有完全理解你的问题 -
您知道
std::ifstream和std::cin在传递给带有std::istream&参数的函数时可以互换吗?与std::ofstream和std::cout与std::ostream&相同。 -
@Galik 保持单一职责,我想要一个适配器来获取一个打开的文件并构建这个结构。它不必担心解析命令行参数和文件 I/O。此外,这会将适配器绑定到特定的输入流,将来如果输入文件来自其他来源而不是作为可执行文件的参数会怎样。
-
这就是为什么我认为你应该使用
std::istream&和std::ostream&适配器参数并将std::cin和std::cout作为参数传递给它。
标签: c++ file io fstream io-redirection