你知道普通的stdio习惯 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() );
有帮助吗?

解决方案

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 是指定一个无用的eleter cin 案件,因为,好吧, cin 并非要删除。

其他提示

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top