std::ranges:: views:: istream, std::ranges:: basic_istream_view, std::ranges:: istream_view, std::ranges:: wistream_view
|
Определено в заголовочном файле
<ranges>
|
||
|
template
<
std::
movable
Val,
class
CharT,
class
Traits
=
std::
char_traits
<
CharT
>
>
|
(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
>
|
(4) | (начиная с C++20) |
|
Вспомогательные концепты
|
||
|
template
<
class
Val,
class
CharT,
class
Traits
>
concept
/*stream-extractable*/
=
|
(5) | ( только для демонстрации* ) |
U
является
std::
remove_reference_t
<
decltype
(
e
)
>
.
U
не является одновременно публично и однозначно производным от
std::
basic_istream
<
typename
U
::
char_type
,
typename
U
::
traits_type
>
, что может привести к
ошибке подстановки
.
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>
)
|
||
|
Хотя
|
(до 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
(шаблон класса) |