Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
Определено в заголовочном файле <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 /* неопределён */ istream = /* неопределён */ ;

}
(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.

Содержание

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

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

Члены данных

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

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

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

Хотя basic_istream_view наследуется от std::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
(шаблон класса)