试图在std :: cout和std :: ifstream之间切换

问题描述:

我想要读取从命令行确定的std::cinstd::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::cinstd::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); 
} 
+0

我想你应该指出的是,这个工程,因为这两个给std :: cin和std :: ifstream的是的std :: istream的 – Antonio

+0

@Antonio谢谢,完成。 – juanchopanza

双方的std :: ifstream的和std :: CIN为InputStream,你可以调用一个istream对象作为参数的函数