Что такое istream_view и когда его использовать?

Dec 12 2020

По- видимому, C ++ 20 имеет новую о std::istreamсвязанной конструкции: std::istream_view. Страница cppreference на нем сейчас является заглушкой . Итак, что такое «представление istream» и для чего его можно использовать?


† - Хорошо, технически он перенаправляет на страницу, о которой идет речь, std::basic_istream_viewа эта - заглушка.

Ответы

3 einpoklum Dec 12 2020 at 05:32

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 описал как эквивалент сопрограммы, которая анализирует Ts из istream; прочтите этот ответ для получения подробной информации (обратите внимание, что это касается представления istream в range-v3, большая часть которого стала стандартной библиотекой диапазонов).
  • @NicolBolas считает, что это результат «оборачивания std::istream_iterator<T>интерфейса представления C ++ 20».