C ++:将cin分配给ifstream变量?

时间:2010-01-29 02:11:51

标签: c++ iostream ifstream

你知道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() );

2 个答案:

答案 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)