重定向输入和输出时如何在main之外处理文件I / O?

时间:2018-08-23 15:30:34

标签: c++ file io fstream io-redirection

我正在处理的程序的一个限制是应以./a.out < input.txt > output.txt的形式调用它。该程序的输入应从第一个文件读取,输出应写入第二个文件。

因此,这会将标准输入和输出从这两个文件重定向到。我可以简单地从main()中调用std::cinstd::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);

如何在此处实现类似的目标?

1 个答案:

答案 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