什么是 istream_view 以及何时使用?

What is an istream_view and when do I use one?

显然,C++20 有一个新的 std::istream 相关结构:std::istream_viewcppreference page on it 现在是存根 。那么,什么是“istream 视图”,我可以用它做什么?


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

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

的视图

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

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

其他人认为 std::istream_view 是什么:

  • @Barry 将其描述为相当于从 istream 解析 Ts 的协程;阅读 了解详细信息(注意它是关于 ranges-v3 中的 istream 视图,其中大部分成为标准范围库)。
  • @NicolBolas 认为这是“在 C++20 视图界面中包装 std::istream_iterator<T>”的结果。