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

新手上路,请多包涵

我想要一个 istream 类型的变量,它可以保存文件或字符串的内容。这个想法是,如果没有指定文件,则 istream 类型的变量将被分配一个字符串。

 std::ifstream file(this->_path)

std::istringstream iss(stringSomething);

std::istream is

我尝试将它们分配给 istream 变量,就像我对从同一基类继承的其他对象一样,但这不起作用。

如何将 istringstreamifstream 分配给 --- istream 变量?

原文由 oddRaven 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 622
1 个回答

基类指针可以指向派生类数据。 std::istringstreamstd::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;

原文由 Rakete1111 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题