Что такое istream_view и когда его использовать?
Судя по всему, в C++20 появился новый
std::istream
связанная конструкция:
std::istream_view
. Страница cppreference на нем сейчас незавершенная † . Итак, что такое «взгляд на
istream
"и для чего я могу его использовать?
† - Хорошо, технически он перенаправляет на страницу о
std::basic_istream_view
а это заглушка.
1 ответ
Ан
std::istream_view<T>
это диапазон ; а точнее, диапазон, сформированный как представление . Это дополнение к стандартной библиотеке похоже на то, что вы можете найти в разделе
std::ranges::views
- за исключением того, что это не представление произвольного диапазона, а .
Так что же такое «просмотр» применяется к
std::istream
? Напомним
istream
это поток символов , а не произвольный-тип элементов по вашему выбору. Ленивое применение разбора этих символов на последовательные - это "просмотр" istream. То есть k-й элемент
std::istream_view<T>(is)
это то, что вы получите в k-й раз
is >> t
за
t
типа .
Вы бы использовали ( осторожно ), когда хотите применить свой код, который работает с диапазонами, непосредственно к входным данным, а не сначала анализировать ваш ввод в какую-то структуру данных более «старой школой», а затем работать над этой структурой как диапазон.
Другие берут на себя то, что
std::istream_view
является:
- @Barry описал как эквивалент сопрограммы, которая анализирует
T
s из istream; прочитайте этот ответ для деталей (обратите внимание, что речь идет о представлении istream в диапазонах-v3, большая часть которых стала стандартной библиотекой диапазонов). - @NicolBolas считает, что это результат «обертывания
std::istream_iterator<T>
в интерфейсе представления C++20".