C++:从(到)文件读取(写入)如果提供,否则回退到 std::cin (std::cout)

Rav*_*ari 0 c++ file-io

我有这个需要。如果提供,则从/向文件读取或写入回退到好朋友std::cin/ std::cout,如下所示:

// pseudo code for problem statement.

int main(int argc, char* argv[]) 
{
  istream reader;
  ostrea writer;
  if (argc > 1) 
  {
    // we have path to our file in argv[] 
    reader = ifstream(infile);
    writer = ofstream(outfile);
  }
  else
  {
    reader = cin;
    writer = cout;
  }
 // rest of code
}

Run Code Online (Sandbox Code Playgroud)

从本质上讲,即使我的想法很复杂,有没有办法实现类似的目标。谢谢!

使用的环境:C++ 11、14、17。

编辑#1:详细说明if条件,如果程序被称为

$: driver "input_file.txt" "output_file.txt"
Run Code Online (Sandbox Code Playgroud)

它应该从这些文件中执行 IO,相反,如果这样调用,

$: driver < "input_file.txt" > "output_file.txt" 
Run Code Online (Sandbox Code Playgroud)

它应该使用std::cinstd::cout

// 编辑结束#1

我正在阅读这里的参考资料,我在想这是否有帮助?

raw*_*rex 5

您可以考虑以下方法:

void read_write(ifstream&, ofstream&);  // Overloaded reader-writer
void read_write(istream&, ostream&);

int main(int argc, char* argv[]) {
    if (argc > 1) {
        auto infile = argv[1];
        auto outfile = argv[2]
        read_write(infile, outfile);
    } else read_write(cin, cout);
    // rest of code
}
Run Code Online (Sandbox Code Playgroud)