std::ranges::views::istream, std::ranges::basic_istream_view, std::ranges::istream_view, std::ranges::wistream_view
| Definido en el encabezado <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) | (desde C++20) |
| Plantillas auxiliares |
||
template< class Val >
using istream_view = ranges::basic_istream_view<Val, char>;
|
(2) | (desde C++20) |
template< class Val >
using wistream_view = ranges::basic_istream_view<Val, wchar_t>;
|
(3) | (desde C++20) |
| Objetos de punto de personalización |
||
namespace views {
template< class T >
constexpr /* unspecified */ istream = /* unspecified */;
}
|
(4) | (desde C++20) |
| Conceptos auxiliares |
||
template< class Val, class CharT, class Traits >
concept /*stream-extractable*/ =
requires(std::basic_istream<CharT, Traits>& is, Val& t) {
is >> t;
};
|
(5) | (solo exposición*) |
operator>>.char y wchar_t.views::istream<T>(e) es equivalente en expresión a ranges::basic_istream_view<T, typename U::char_type, typename U::traits_type>(e) para cualquier subexpresión adecuada e, donde U es std::remove_reference_t<decltype(e)>.U no es derivado pública e inequívocamente de std::basic_istream<typename U::char_type, typename U::traits_type>, lo que puede resultar en un fallo de sustitución./*stream-extractable*/<Val, CharT, Traits> se satisface cuando un valor L de tipo Val puede ser extraído de un valor L de tipo std::basic_istream<CharT, Traits>.El tipo de iterador de basic_istream_view es solo de movimiento: no cumple con los requisitos de LegacyIterator y, por lo tanto, no funciona con algoritmos anteriores a C++20.
Objetos de punto de personalización
El nombre
views::istream<T>
denota un
objeto de punto de personalización
, que es un
objeto función
constante de tipo clase
literal
semiregular
. Consulte
CustomizationPointObject
para más detalles.
Miembros de datos
| Miembro | Descripción |
std::basic_istream<CharT, Traits>* stream_
|
un puntero al flujo de entrada (objeto miembro solo de exposición*) |
Val value_
|
el valor almacenado (objeto miembro solo de exposición*) |
Funciones miembro
construye un
basic_istream_view
(función miembro pública) |
|
|
devuelve un iterador
(función miembro pública) |
|
|
devuelve
std::default_sentinel
(función miembro pública) |
|
Heredado de ranges::view_interface | |
(C++23) |
devuelve un iterador constante al inicio del rango (función miembro pública de std::ranges::view_interface<D>)
|
(C++23) |
devuelve un centinela para el iterador constante del rango (función miembro pública de std::ranges::view_interface<D>)
|
|
Aunque |
(hasta C++23) |
std::ranges::basic_istream_view:: basic_istream_view
|
constexpr
explicit
basic_istream_view ( std:: basic_istream < CharT, Traits > & stream ) ; |
(desde C++20) | |
Inicializa
stream_
con
std::
addressof
(
stream
)
, e inicializa por valor
value_
.
std::ranges::basic_istream_view:: begin
|
constexpr
auto
begin
(
)
;
|
(desde C++20) | |
Equivalente a
*
stream_
>>
value_
;
return
iterator
{
*
this
}
;
.
std::ranges::basic_istream_view:: end
|
constexpr
std::
default_sentinel_t
end
(
)
const
noexcept
;
|
(desde C++20) | |
Devuelve std:: default_sentinel .
Clases anidadas
el tipo de iterador de
basic_istream_view
( clase miembro solo para exposición* ) |
Ejemplo
#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'; }
Salida:
/today/ /is/ /yesterday’s/ /tomorrow/ 1.1, 2.2, 3.3, 4.4, 55, 66, 7.7, 8.8,
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3568 | C++20 | P2325R3 accidentalmente hizo que el valor almacenado se inicializara por defecto | restaurado a inicialización por valor |
| P2325R3 | C++20 |
el constructor por defecto se proporcionó ya que
view
debe ser
default_initializable
|
eliminado junto con
el requisito |
| P2432R1 | C++20 |
ranges::istream_view
era una plantilla de función
y no seguía la convención de nomenclatura |
convertido en plantilla de alias;
objetos de punto de personalización añadidos |
Véase también
|
iterador de entrada que lee desde
std::basic_istream
(plantilla de clase) |