首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++:将cin赋给ifstream变量?

C++:将cin赋给ifstream变量?
EN

Stack Overflow用户
提问于 2010-01-29 10:11:51
回答 1查看 12.4K关注 0票数 17

你知道一个常见的标准成语,stdin是由一个文件名"-“指定的,例如

代码语言:javascript
复制
if ((strcmp(fname, "-"))
    fp = fopen(fname);
else
    fp = stdin;

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

代码语言:javascript
复制
if ( filename == "-")
    logstream = cin;  // **how do I do this*?*
else
    logstream.open( filename.c_str() );
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-29 10:16:12

cin不是ifstream,但是如果你可以使用istream,那么你一定会赢。否则,如果您准备成为不可移植的,只需打开/dev/stdin/dev/fd/0或其他任何东西。:-)

如果您确实想要可移植,并且可以让您的程序使用istream,这里有一种方法可以做到:

代码语言:javascript
复制
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并不是要删除的。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2159452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档