c++ - 什么是 istream_view,什么时候使用?

标签 c++ range c++20 istream istream-view

显然,C++20 有一个新的 std::istream -相关构造:std::istream_view . cppreference page on it现在是 stub †。那么,什么是“istream 的 View ”,我可以用它做什么?

† - 好的,从技术上讲,它重定向到一个关于 std::basic_istream_view 的页面那是一个 stub 。

最佳答案

std::istream_view<T>范围 ;更具体地说,一个范围形成为 查看 .标准库中的这一补充类似于您在 std::ranges::views 下可能找到的内容。 - 除了它不是任意范围的 View ,而是 std::istream .
那么什么“查看”适用于 std::istream ?召回 istream是一个字符流,不是任意的 T - 您选择的类型元素。将这些字符解析成连续 T 的懒惰应用's 是 istream 的“查看”。即std::istream_view<T>(is)的第k个元素是您第 k 次运行的结果 is >> tt类型 T .
您将使用 std::istream_view ( carefully ) 当您想将适用于范围的代码直接应用于输入数据时 - 而不是首先以更“老派”的方式将输入解析为某个数据结构,然后将该结构作为范围。
其他承担什么std::istream_view是:

  • @Barry 描述为相当于解析 T 的协程s 来自 istream;阅读 this answer有关详细信息(请注意,这是关于 range-v3 中的 istream View ,其中大部分成为标准范围库)。
  • @NicolBolas 认为它​​是“在 C++20 View 界面中包装 std::istream_iterator<T>”的结果。
  • 关于c++ - 什么是 istream_view,什么时候使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65259525/

    相关文章:

    c++ - 是否可以使用指向成员的指针来获取实际指针?

    c++ - 指向第一个和最后一个成员的指针 : List Initialization

    c++ - Qt 应用程序 : build with different Qt versions 的 CI

    swift - NSdate 范围总删除周末 Swift

    c++ - 为什么 `std::compare_three_way` 不是 `std::strict_weak_order` ?

    c++ - 在 C++20 中使用 typename 需要/概念?

    c++ - 为什么 consteval/constexpr 和模板元函数之间的编译时间存在如此巨大的差异?

    c++ - 使用 Fortran 编译和链接 C++

    javascript - 如何在内联粗体标记后对元素进行范围选择?

    sql-server - 需要有关 SQL 查询的帮助,从周期表中选择日期范围