Выберите поток для ввода - PullRequest
       12

Выберите поток для ввода

0 голосов
/ 03 апреля 2012

Мне нужна очень простая вещь в C ++: используйте один из двух входных потоков - file или stdin - в зависимости от определенного условия.
Примерно так:

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

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

Надеюсь, идея ясна.

Прежде всего, кажется, что он не может объявить переменную istream (istream, потому что она является общей для ifstream и ci n) без подключения к какому-либо устройству, файлу или чему-либо еще.
Во-вторых, он вообще не может объявить переменную istream, компилятор говорит:

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

И, следовательно, какой класс я должен использовать для этих целей?

Итак, не удалосьчтобы понять.Пожалуйста помоги.Благодаря.

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Вы можете объявить istream* и затем в присваивании if либо &cin, либо адресу вашего ifstream. В следующих строках, если вы хотите избежать уродливого синтаксиса разыменования вашего указателя, вы можете объявить istream&.

0 голосов
/ 03 апреля 2012

Как упоминал Лука, вам, вероятно, понадобится указатель или ссылка istream. Ссылка немного сложнее, потому что вы можете инициализировать его только один раз и не можете изменить его позже. Другое обсуждение этой темы может быть найдено здесь

...