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
не предназначено для удаления.