2

我想从命令行读取输入std::cinstd::ifstream从命令行确定的输入。该命令看起来像./run 1./run 2。现在,我必须根据读取模式编写两个几乎相似的函数。

void read1()
{
  int a, b;
  while (std::cin >> a >> b) {
    // do something
  }
}

或者

void read2()
{
  int a, b;
  std::ifstream fin("file.txt");
  while (fin >> a >> b) {
    // do something
  }
}

对于大循环,很难同时维护这两个功能,因为循环部分是通用的,唯一的区别是输入源。

如何整合这两个功能?

4

2 回答 2

8

std::cin并且std::ifstream都是std::istreams,因此您可以通过使用对 . 的引用进行操作的函数来解决此问题std::istream。这将适用于std::cinstd::ifstream实例和任何其他std::istreams:

void read(std::istream& input)
{
  while (input >> a >> b) { .... }
}

然后切换到呼叫方。

if (something)
{
  read(std::cin);
} else
{
  isfream input(....);
  read(input);
}
于 2013-06-25T06:24:32.687 回答
0

std::ifstream 和 std::cin 都是输入流,您可以使用 istream 作为参数调用该函数

于 2013-06-25T06:24:26.800 回答