你知道一个常见的标准成语,stdin
是由一个文件名"-“指定的,例如
if ((strcmp(fname, "-"))
fp = fopen(fname);
else
fp = stdin;
使用ifstream
实例执行此操作的最佳方法是什么?我收到了一些将ifstream
作为类的一部分的代码,我想添加一些代码来做同样的事情,比如:
if ( filename == "-")
logstream = cin; // **how do I do this*?*
else
logstream.open( filename.c_str() );
发布于 2010-01-29 10:16:12
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
并不是要删除的。
https://stackoverflow.com/questions/2159452
复制相似问题