std::ranges::views::istream, std::ranges::basic_istream_view, std::ranges::istream_view, std::ranges::wistream_view - cppreference.com
| Definido en el archivo de encabezado |
||
|
|
(1) | (desde C++20) |
| Plantillas auxiliares |
||
|
|
(2) | (desde C++20) |
|
|
(3) | (desde C++20) |
| Objetos de punto de personalización |
||
|
|
(4) | (desde C++20) |
| Conceptos auxiliares |
||
|
|
(5) | (desde C++20) |
1) Una fábrica de rangos que genera una secuencia de elementos llamando repetidamente a operator>>.
2-3) Plantillas de alias convenientes para los tipos de carácter char y wchar_t.
4) 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.
5) El concepto de solo exposició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
Construye un objeto 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) | |
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
|
|
(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
|
|
(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
|
|
(desde C++20) | |
Equivalente a return std::default_sentinel;.
Clases anidadas
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. |