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

Mar*_*son 16 c++ iostream ifstream

你知道stdin由文件名" - "指定的常见stdio习语,例如

if ((strcmp(fname, "-"))
    fp = fopen(fname);
else
    fp = stdin;
Run Code Online (Sandbox Code Playgroud)

使用ifstream实例执行此操作的最佳方法是什么?我收到了一些代码,它有ifstream一个类的一部分,我想添加代码来做同等的事情,比如:

if ( filename == "-")
    logstream = cin;  // **how do I do this*?*
else
    logstream.open( filename.c_str() );
Run Code Online (Sandbox Code Playgroud)

Chr*_*ung 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()));
Run Code Online (Sandbox Code Playgroud)

noop是指定一个缺失者,什么也不做的cin情况下,因为,cin并不意味着被删除.