我正在处理的程序的一个限制是应以./a.out < input.txt > output.txt
的形式调用它。该程序的输入应从第一个文件读取,输出应写入第二个文件。
因此,这会将标准输入和输出从这两个文件重定向到。我可以简单地从main()
中调用std::cin
和std::cout
。但是,我有一个专用组件,可以将文件中的输入调整为程序中其他地方使用的中间结构。
为了构建此结构,我可以在此组件中#include <iostream>
,并从std::cin
中使用input.txt
进行读取。但是,我不喜欢在此处包含iostream的想法,并且不确定如何测试。
我的问题来自I / O重定向,如果以文件名作为字符串调用可执行文件,我将按照
的方式进行操作 InputAdapter inputAdapter;
ifstream infile;
infile.open(filename ,std::ios_base::in);
auto structHoldingParsedInput = inputAdapter.adapt(infile);
如何在此处实现类似的目标?
答案 0 :(得分:2)
我建议您设置适配器参数std::istream&
和std::ostream&
,以便您可以传入标准std::cin
/ std::cout
或诸如{{1 }}。
有点像这样:
std::ifstream
现在您正在编码到流而不是文件,则可以使用 any 流,例如标准输入流:
class InputAdapter
{
public:
void adapt(std::istream& in)
{
// code to convert input to output here
return created_object;
}
};
// ...
InputAdapter inputAdapter;
std::ifstream in("input_file");
auto structHoldingParsedInput = inputAdapter.adapt(in);
并且,为了进行测试,您可以使用auto structHoldingParsedInput = inputAdapter.adapt(std::cin);
:
std::istringstream