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