试图在std :: cout和std :: ifstream之间切换
问题描述:
我想要读取从命令行确定的std::cin
或std::ifstream
的输入。该命令看起来像./run 1
或./run 2
。现在,我必须根据读取模式编写两个几乎相似的函数。试图在std :: cout和std :: ifstream之间切换
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
}
}
对于大环是困难的维持两者的功能,因为在循环的部分是共同的,唯一的差别是输入源。
我该如何整合这两个功能?
答
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 :: ifstream的和std :: CIN为InputStream,你可以调用一个istream对象作为参数的函数
我想你应该指出的是,这个工程,因为这两个给std :: cin和std :: ifstream的是的std :: istream的 – Antonio
@Antonio谢谢,完成。 – juanchopanza