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
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 /* no especificado */ istream = /* no especificado */ ;

}
(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 para exposición* )
1) Una fábrica de rangos que genera una secuencia de elementos llamando repetidamente operator >> .
2,3) Alias de plantilla de conveniencia para tipos de caracteres char y wchar_t .
4) views :: istream < T > ( e ) es equivalente-expresivo 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 está derivado pública y uní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 lvalue de tipo Val puede ser extraído de un lvalue de tipo std:: basic_istream < CharT, Traits > .

El tipo iterador de basic_istream_view es de solo movimiento: no cumple con los LegacyIterator requisitos, y por lo tanto no funciona con algoritmos anteriores a C++20.

Contenidos

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 Definición
std:: basic_istream < CharT, Traits > * stream_ un puntero al flujo de entrada
( objeto miembro solo para exposición* )
Val value_ el valor almacenado
( objeto miembro solo para 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 std::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 std::ranges::view_interface , no puede utilizar ninguna de las funciones miembro heredadas.

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