Namespaces
Variants

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

De es.cppreference.net
 
 
Biblioteca de rangos
Adaptadores de rangos
 
 
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*)
1) Una fábrica de rangos que genera una secuencia de elementos llamando repetidamente a operator>>.
2,3) Plantillas de alias de conveniencia para tipos de caracteres char y wchar_t.
4) 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)>.
El programa está mal formado si 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.
5) El concepto de solo exposició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 basic_istream_view se deriva de ranges::view_interface, no puede usar ninguna de las funciones miembro heredadas.

(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)