显然,C++20 有一个新的std::istream
-related 结构:std::istream_view
. 它上面的cppreference 页面现在是一个存根†</sup>。那么,什么是“视图istream
”,我可以用它做什么?
† - 好的,从技术上讲,它重定向到一个页面 aboutstd::basic_istream_view
并且那个页面是一个存根。
显然,C++20 有一个新的std::istream
-related 结构:std::istream_view
. 它上面的cppreference 页面现在是一个存根†</sup>。那么,什么是“视图istream
”,我可以用它做什么?
† - 好的,从技术上讲,它重定向到一个页面 aboutstd::basic_istream_view
并且那个页面是一个存根。
Anstd::istream_view<T>
是一个范围;更具体地说,形成为视图的范围。标准库中的这一新增内容类似于您可能会在下面找到的内容std::ranges::views
- 除了它不是任意范围的视图,而是std::istream
.
那么什么“查看”应用于一个std::istream
?回想一下 anistream
是一个字符流,而不是您选择的任意T
类型元素。将这些字符解析为连续T
的 's 的惰性应用是 istream 的“查看”。也就是说,第 k 个元素std::istream_view<T>(is)
是你第 k 次运行is >> t
typet
的元素T
。
当您想将与范围一起使用的代码直接应用于输入数据时,您将使用std::istream_view
(小心) - 而不是首先以更“老派”的方式将输入解析为某个数据结构,然后处理该结构作为一个范围。
其他关于 anstd::istream_view
是什么的:
T
从 istream 解析 s 的协程的等价物;阅读this answer了解详细信息(注意它是关于ranges-v3中的istream视图,其中大部分成为标准范围库)。std::istream_iterator<T>
在 C++20 视图界面中”的结果。