Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正在尝试在std::cout和std::ifstream之间切换_C++_Ifstream_Cin - Fatal编程技术网

C++ 正在尝试在std::cout和std::ifstream之间切换

C++ 正在尝试在std::cout和std::ifstream之间切换,c++,ifstream,cin,C++,Ifstream,Cin,我想从命令行确定的std::cin或std::ifstream读取输入。该命令看起来像/run 1或/run 2。现在,我必须基于读取模式编写两个几乎相似的函数 void read1() { int a, b; while (std::cin >> a >> b) { // do something } } 或 对于大循环,很难维护这两个函数,因为循环部分是公共的,唯一的区别是输入源 如何集成这两个函数?std::ifstream和std::cin都

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

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

对于大循环,很难维护这两个函数,因为循环部分是公共的,唯一的区别是输入源


如何集成这两个函数?

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

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

void read(std::istream& input)
{
  while (input >> a >> b) { .... }
}
然后打开呼叫端

if (something)
{
  read(std::cin);
} else
{
  isfream input(....);
  read(input);
}

我认为您应该指出这是可行的,因为std::cin和std::ifstream都是std::istream
if (something)
{
  read(std::cin);
} else
{
  isfream input(....);
  read(input);
}