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> >
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) | (только для описания*) |
operator>>.char и wchar_t.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>, что может привести к ошибке подстановки./*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>)
|
|
Хотя |
(до 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
(шаблон класса) |