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);
}