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