cin
is not an ifstream
, but if you can use istream
instead, then you're in to win. Otherwise, if you're prepared to be non-portable, just open /dev/stdin
or /dev/fd/0
or whatever. :-)
If you do want to be portable, and can make your program use istream
, here's one way to do it:
struct noop {
void operator()(...) const {}
};
// ...
shared_ptr<istream> input;
if (filename == "-")
input.reset(&cin, noop());
else
input.reset(new ifstream(filename.c_str()));
The noop
is to specify a deleter that does nothing in the cin
case, because, well, cin
is not meant to be deleted.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…