std::ranges::views::istream, std::ranges::basic_istream_view, std::ranges::istream_view, std::ranges::wistream_view
| Definido en el archivo de encabezado <ranges>
|
||
template< std::movable Val, class CharT, class Traits = std::char_traits<CharT> > requires std::default_initializable<Val> && /*extraíble-del-flujo*/<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 |
||
template< class T > inline constexpr /*no especificado*/ istream = /*no especificado*/; |
(4) | (desde C++20) |
| Conceptos auxiliares |
||
template< class Val, class CharT, class Traits > concept /*extraíble-del-flujo*/ = requires(std::basic_istream<CharT,Traits>& is, Val& t) { is >> t; }; |
(5) | (desde C++20) |
operator>>.char y wchar_t.views::istream<T>(e) es equivalente en expresión a (tiene el mismo efecto que) ranges::basic_istream_view<T, typename U::char_type, typename U::traits_type>(e) para cualquier subexpresión e adecuada, donde U es std::remove_reference_t<decltype(e)>. El programa está mal formado si U no está ni públicamente ni inequivocadamente derivada de std::basic_istream<typename U::char_type, typename U::traits_type>, lo que puede resultar en una falla en la sustitución./*extraíble-del-flujo*/<Val,CharT,Traits> se satisface cuando el l-valor de Val puede extraerse del l-valor de std::basic_istream<CharT,Traits>.El tipo iterador de basic_istream_view es de solo movimiento: no cumple con los requerimientos de Iterator, y por lo tanto no funciona con los algoritmos anteriores a C++20.
Equivalente en expresión
La expresión e es equivalente-en-expresión a la expresión f, si e y f tienen los mismos efectos, ambas potencialmente lanzan o ambas potencialmente no lanzan (es decir, noexcept (e) == noexcept(f)), y ambas son subexpresiones constantes o ambas no son subexpresiones constantes.
Objetos de punto de personalización
El nombre views::basic_istream_view denota un objeto de punto de personalización, que es un objeto función const de un tipo clase literal semiregular (denotado, a efectos de exposición, como basic_istream_view_ftor). Todos los ejemplares de basic_istream_view_ftor son iguales. Por lo tanto, views::basic_istream_view puede copiarse libremente y sus copias pueden usarse indistintamente.
Dado un conjunto de tipos Args..., si std::declval<Args>()... cumple con los requerimientos para los argumentos de views::basic_istream_view mencionado anteriormente, basic_istream_view_ftor satisfará a std::invocable<const basic_istream_view_ftor&, Args...>. De lo contrario, ningún operador de llamada a función de basic_istream_view_ftor participa en la resolución de sobrecarga.
Funciones miembro
(C++20) |
Construye un objeto basic_istream_view. (función miembro pública) |
(C++20) |
Devuelve un iterador. (función miembro pública) |
(C++20) |
Devuelve std::default_sentinel. (función miembro pública) |
Heredadas de ranges::view_interface | |
| (Ninguna) | Aunque basic_istream_view se deriva de ranges::view_interface, no puede usar ninguna de las funciones miembro heredadas.
|
std::ranges::basic_istream_view::basic_istream_view
<tbody> </tbody> constexpr explicit basic_istream_view( std::basic_istream<CharT, Traits>& stream ); |
(desde C++20) | |
Inicializa el puntero almacenado para emitir flujo con std::addressof(stream), e inicializa por valor el valor almacenado de Val.
std::ranges::basic_istream_view::begin
<tbody> </tbody> constexpr auto begin(); |
(desde C++20) | |
Equivalente a *stream_ >> value_; return /*iterador*/{*this};, donde stream_ el puntero almacenado para emitir flujo y value_ es el valor almacenado de Val.
std::ranges::basic_istream_view::end
<tbody> </tbody> constexpr std::default_sentinel_t end() const noexcept; |
(desde C++20) | |
Equivalente a return std::default_sentinel;.
Clases anidadas
(C++20) |
El tipo iterador de basic_istream_view, el nombre es solo de exposición.(clase miembro de solo exposición) |
Ejemplo
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <ranges>
#include <sstream>
#include <string>
int main()
{
auto palabras = std::istringstream{"hoy es el mañana del ayer"};
for (const auto& s: std::ranges::istream_view<std::string>(palabras)) {
std::cout << std::quoted(s, '/') << ' ';
}
std::cout << '\n';
auto flotantes = std::istringstream{"1.1 2.2\t3.3\v4.4\f55\n66\r7.7 8.8"};
std::ranges::copy(
std::ranges::istream_view<float>(flotantes),
std::ostream_iterator<float>{std::cout, ", "});
std::cout << '\n';
}
Salida:
/hoy/ /es/ /el/ /mañana/ /del/ /ayer/
1.1, 2.2, 3.3, 4.4, 55, 66, 7.7, 8.8,
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| P2325R3 | C++20 | Se proporcionaba el constructor por defecto ya que viewdebía ser default_initializable
|
Se eliminó, así como el requerimiento. |
| LWG 3568 | C++20 | P2325R3 hizo accidentalmente el valor almacenado inicializado por defecto. |
Se restauró a inicialización por valor. |
| P2432R1 | C++20 | ranges::istream_view era una función de plantilla yno seguía la convención de nombres. |
Se hizo una plantilla de alias; se añadieron los objetos de punto de personalización. |
Véase también
| Iterador de entrada que lee de un flujo de entrada (std::basic_istream). (plantilla de clase) |