2012-04-03 56 views
0

我需要在C++中非常简单的事情:根据特定条件使用两个输入流中的一个 - 文件或stdin。
就像是:选择要输入的流

istream s; 
if (true) 
    s = cin; 
else 
    s = ifstream(argv[1]); 

while (s.read()) /* ... */ 

希望的思路是清晰的。

首先,现在看来,这是无法申报istream变量(istream,因为这是很常见的ifstreamci N)无需连接任何设备或文件或什么的。
第二件事是它无法在所有申报istream变量,编译器说:

error: ‘std::basic_istream<_CharT, _Traits>::basic_istream() [with _CharT = char, _Traits = std::char_traits<char>]’ is protected 

也因此哪一类是我所使用为目的呢?

所以,不明白。请帮忙。 谢谢。

+0

我注意到,这是你的第一篇文章堆栈溢出。 [Here](http://stackoverflow.com/faq#howtoask),你可以阅读如何提问,评估答案,并可能接受你认为最有帮助的答案。 – 2012-04-03 09:18:29

回答

1

您可以声明一个istream*,然后在if中分配给&cin或分配给您的ifstream的地址。在以下几行中,如果您想要避免引用指针的丑陋语法,您可以声明istream&

0

就像Luca提到的那样,您可能需要使用istream指针或引用。该引用有点棘手,因为您只能初始化一次,以后不能更改。这个主题的另一个讨论可以发现here

+0

酷!谢谢! :) – OlegG 2012-04-03 09:05:50