Ответ 1
cin
не является ifstream
, но если вы можете использовать istream
вместо этого, вы должны выиграть. В противном случае, если вы готовы быть не переносной, просто откройте /dev/stdin
или /dev/fd/0
или что угодно.: -)
Если вы хотите быть переносимым и можете использовать вашу программу istream
, здесь один из способов сделать это:
struct noop {
void operator()(...) const {}
};
// ...
shared_ptr<istream> input;
if (filename == "-")
input.reset(&cin, noop());
else
input.reset(new ifstream(filename.c_str()));
noop
должен указать дебетер, который ничего не делает в случае cin
, потому что, ну, cin
не предназначен для удаления.