微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 如何将istringstream和ifstream分配给istream变量?

我想要一个istream类型的变量,它可以保存文件内容或字符串.我们的想法是,如果没有指定文件,那么istream类型的变量将被赋予一个字符串.

std::ifstream file(this->_path)

std::istringstream iss(stringSomething);

std::istream is

我试过将它们分配给istream变量,就像我从其他从同一基类继承的对象那样,但是没有用.

如何将istringstream和ifstream分配给istream变量?

解决方法

基类指针可以指向派生类数据. std :: istringstream和std :: ifstream都是从std :: istream派生的,所以我们可以这样做:

//Note that std::unique_ptr is better that raw pointers
std::unique_ptr<std::istream> stream;

//stream holds a file stream
stream = std::make_unique<std::ifstream>(std::ifstream{ this->_path });

//stream holds a string
stream = std::make_unique<std::istringstream>(std::istringstream{});

现在你只需要使用提取内容

std::string s;
(*stream) >> s;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐