你知道stdin
指定的常见stdio习语
文件名为“ - ”,例如
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() );
答案 0 :(得分:23)
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
并不意味着删除。
答案 1 :(得分:0)