4

显然,C++20 有一个新的std::istream-related 结构:std::istream_view. 它上面的cppreference 页面现在是一个存根†</sup>。那么,什么是“视图istream”,我可以用它做什么?


† - 好的,从技术上讲,它重定向到一个页面 aboutstd::basic_istream_view并且那个页面是一个存根。

4

1 回答 1

4

Anstd::istream_view<T>是一个范围;更具体地说,形成为视图的范围。标准库中的这一新增内容类似于您可能会在下面找到的内容std::ranges::views- 除了它不是任意范围的视图,而是std::istream.

那么什么“查看”应用于一个std::istream?回想一下 anistream是一个字符流,而不是您选择的任意T类型元素。将这些字符解析为连续T的 's 的惰性应用是 istream 的“查看”。也就是说,第 k 个元素std::istream_view<T>(is)是你第 k 次运行is >> ttypet的元素T

当您想将与范围一起使用的代码直接应用于输入数据时,您将使用std::istream_view小心) - 而不是首先以更“老派”的方式将输入解析为某个数据结构,然后处理该结构作为一个范围。

其他关于 anstd::istream_view是什么的:

  • @Barry 已将其描述为T从 istream 解析 s 的协程的等价物;阅读this answer了解详细信息(注意它是关于ranges-v3中的istream视图,其中大部分成为标准范围库)。
  • @NicolBolas 认为它​​是“包装 std::istream_iterator<T>在 C++20 视图界面中”的结果。
于 2020-12-11T22:32:50.140 回答