【问题标题】:How can I convert an ifstream to an istream如何将 ifstream 转换为 istream
【发布时间】:2018-03-29 20:03:22
【问题描述】:

有什么方法可以将ifstream 转换为istream?我有一个名为getToken(istream* br) 的函数,它接受istream 作为参数,但在我的main() 中,我使用ifstream 来读取文件,并且我必须使用相同的ifstream 来调用getToken。我该如何克服这个问题?

【问题讨论】:

  • 你不需要它是已经一个ìstream
  • ifstream 派生自 istream。您应该可以将其传递给getToken。当你尝试时会发生什么?显示minimal reproducible example
  • 除了 Galik 的评论,如果你真的想要 istream&istream*,你可以 dynamic_cast 它。但这不是必需的,并且会增加额外的开销。另见dynamic_cast and static_cast in C++

标签: c++ casting ifstream istream


【解决方案1】:

正如 cmets 中所述,您不需要做任何花哨的事情。 std::ifstream 类型继承自 std::istream,因此任何采用 istream* 的函数都可以将指向 ifstream 的指针作为输入。例如:

string getToken(istream* stream) {
    ...
}

ifstream fileStream;
getToken(&fileStream);

流类是专门为使这样的操作成为可能而设计的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 2013-01-06
    • 2016-05-27
    • 2018-09-26
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多