Namespaces
Variants

std::ranges::views::istream, std::ranges::basic_istream_view, std::ranges::istream_view, std::ranges::wistream_view

От ru.cppreference.net
 
 
Библиотека диапазонов
Адаптеры диапазонов
 
 
Определён в заголовке <ranges>
template< std::movable Val, class CharT,
          class Traits = std::char_traits<CharT> >
    requires std::default_initializable<Val> &&
             /*stream-extractable*/<Val, CharT, Traits>
class basic_istream_view
    : public ranges::view_interface<basic_istream_view<Val, CharT, Traits>>
(1) (начиная с C++20)
Вспомогательные шаблоны
template< class Val >
using istream_view = ranges::basic_istream_view<Val, char>;
(2) (начиная с C++20)
template< class Val >
using wistream_view = ranges::basic_istream_view<Val, wchar_t>;
(3) (начиная с C++20)
Объекты точек настройки
namespace views {
    template< class T >
    constexpr /* unspecified */ istream = /* unspecified */;
}
(4) (начиная с C++20)
Вспомогательные концепции
template< class Val, class CharT, class Traits >
concept /*stream-extractable*/ =
    requires(std::basic_istream<CharT, Traits>& is, Val& t) {
        is >> t;
    };
(5) (только для описания*)
1) Фабрика диапазона, которая генерирует последовательность элементов путем многократного вызова operator>>.
2,3) Удобные псевдонимы шаблонов для символьных типов char и wchar_t.
4) views::istream<T>(e) является выражением-эквивалентом ranges::basic_istream_view<T, typename U::char_type, typename U::traits_type>(e) для любых подходящих подвыражений e, где U — это std::remove_reference_t<decltype(e)>.
Программа является некорректной, если U не является одновременно открыто и однозначно унаследованным от std::basic_istream<typename U::char_type, typename U::traits_type>, что может привести к ошибке подстановки.
5) Концепция только для описания /*stream-extractable*/<Val, CharT, Traits> выполняется, когда lvalue типа Val может быть извлечено из lvalue типа std::basic_istream<CharT, Traits>.

Тип итератора basic_istream_view является только перемещаемым: он не соответствует требованиям LegacyIterator и, следовательно, не работает с алгоритмами до C++20 algorithms.

Объекты точек кастомизации

Имя views::istream<T> обозначает объект точки кастомизации , который является константным функциональным объектом типа литерального semiregular класса. См. CustomizationPointObject для подробностей.

Элементы данных

Член Описание
std::basic_istream<CharT, Traits>* stream_ указатель на входной поток
(объект-член, только для демонстрации*)
Val value_ сохранённое значение
(объект-член, только для демонстрации*)

Функции-члены

создаёт basic_istream_view
(публичная функция-член)
возвращает итератор
(публичная функция-член)
возвращает std::default_sentinel
(публичная функция-член)
Унаследовано от ranges::view_interface
(C++23)
возвращает константный итератор на начало диапазона
(открытая функция-член std::ranges::view_interface<D>)
(C++23)
возвращает ограничитель для константного итератора диапазона
(открытая функция-член std::ranges::view_interface<D>)

Хотя basic_istream_view является производным от ranges::view_interface, он не может использовать ни одну из унаследованных функций-членов.

(до C++23)

std::ranges::basic_istream_view:: basic_istream_view

constexpr explicit
basic_istream_view ( std:: basic_istream < CharT, Traits > & stream ) ;
(since C++20)

Инициализирует stream_ с помощью std:: addressof ( stream ) и инициализирует значением по умолчанию value_ .

std::ranges::basic_istream_view:: begin

constexpr auto begin ( ) ;
(начиная с C++20)

Эквивалентно * stream_ >> value_  ; return iterator  { * this } ; .

std::ranges::basic_istream_view:: end

constexpr std:: default_sentinel_t end ( ) const noexcept ;
(since C++20)

Возвращает std:: default_sentinel .

Вложенные классы

тип итератора для basic_istream_view
( демонстрационный класс-член* )

Пример

#include <algorithm>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <ranges>
#include <sstream>
#include <string>
int main()
{
    auto words = std::istringstream{"today is yesterday’s tomorrow"};
    for (const auto& s : std::views::istream<std::string>(words))
        std::cout << std::quoted(s, '/') << ' ';
    std::cout << '\n';
    auto floats = std::istringstream{"1.1  2.2\t3.3\v4.4\f55\n66\r7.7  8.8"};
    std::ranges::copy
    (
        std::views::istream<float>(floats),
        std::ostream_iterator<float>{std::cout, ", "}
    );
    std::cout << '\n';
}

Вывод:

/today/ /is/ /yesterday’s/ /tomorrow/
1.1, 2.2, 3.3, 4.4, 55, 66, 7.7, 8.8,

Отчёты о дефектах

Следующие отчеты о дефектах, изменяющих поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 3568 C++20 P2325R3 случайно сделал сохраненное значение инициализированным по умолчанию восстановлено до инициализации значением
P2325R3 C++20 конструктор по умолчанию был предоставлен, так как
view должен быть default_initializable
удален вместе с
требованием
P2432R1 C++20 ranges::istream_view был шаблоном функции
и не следовал соглашению об именовании
сделан шаблоном псевдонима;
добавлены объекты точек настройки

Смотрите также

итератор ввода, который читает из std::basic_istream
(шаблон класса)