我想从任何一个std::cin或std::ifstream从命令行确定的输入读取.该命令看起来像./run 1或./run 2.现在,我必须根据读取模式编写两个几乎相似的函数.
void read1()
{
int a, b;
while (std::cin >> a >> b) {
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
要么
void read2()
{
int a, b;
std::ifstream fin("file.txt");
while (fin >> a >> b) {
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
对于大循环,很难保持这两个函数,因为循环部分是常见的,唯一的区别是输入源.
如何整合这两个功能?
std::cin并且std::ifstream都是std::istreams,因此您可以通过使用对引用进行操作的函数来解决此问题std::istream.这将适用于std::cin,std::ifstream实例和任何其他std::istreams:
void read(std::istream& input)
{
while (input >> a >> b) { .... }
}
Run Code Online (Sandbox Code Playgroud)
然后打开来电方.
if (something)
{
read(std::cin);
} else
{
isfream input(....);
read(input);
}
Run Code Online (Sandbox Code Playgroud)