C ++:将CIN分配给ifstream变量?
题
你知道普通的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
并非要删除。
其他提示
- 保存初始 Cin的Streambuf 变成变量
- 更改 Cin的Streambuf 到 文件中的一个.
- 做你需要做的事
- 而且,不要忘记在关闭文件之前恢复CIN StreamBuf -RAII可能会有所帮助。
不隶属于 StackOverflow