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
Défini dans l'en-tête <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) (depuis C++20)
Modèles d'aide
template < class Val >
using istream_view = ranges :: basic_istream_view < Val, char > ;
(2) (depuis C++20)
template < class Val >
using wistream_view = ranges :: basic_istream_view < Val, wchar_t > ;
(3) (depuis C++20)
Objets de point de personnalisation
namespace views {

template < class T >
constexpr /* non spécifié */ istream = /* non spécifié */ ;

}
(4) (depuis C++20)
Concepts d'aide
template < class Val, class CharT, class Traits >

concept /*stream-extractable*/ =
requires ( std:: basic_istream < CharT, Traits > & is, Val & t ) {
is >> t ;

} ;
(5) ( exposition uniquement* )
1) Une fabrique de plages qui génère une séquence d'éléments en appelant répétitivement operator >> .
2,3) Alias de modèles pratiques pour les types de caractères char et wchar_t .
4) views :: istream < T > ( e ) est expression-équivalent à ranges :: basic_istream_view < T, typename U :: char_type , typename U :: traits_type > ( e ) pour toute sous-expression appropriée e , où U est std:: remove_reference_t < decltype ( e ) > .
Le programme est mal formé si U n'est pas à la fois publiquement et sans ambiguïté dérivé de std:: basic_istream < typename U :: char_type , typename U :: traits_type > , ce qui peut entraîner un échec de substitution .
5) Le concept d'exposition uniquement /*stream-extractable*/ < Val, CharT, Traits > est satisfait lorsqu'une lvalue de type Val peut être extraite d'une lvalue de type std:: basic_istream < CharT, Traits > .

Le type d'itérateur de basic_istream_view est non copiable : il ne satisfait pas aux exigences LegacyIterator , et par conséquent ne fonctionne pas avec les algorithmes antérieurs à C++20.

Table des matières

Objets de point de personnalisation

Le nom views::istream<T> désigne un objet de point de personnalisation , qui est un objet fonction constant d'un type de classe littéral semiregular . Voir CustomizationPointObject pour plus de détails.

Membres de données

Membre Définition
std:: basic_istream < CharT, Traits > * stream_ un pointeur vers le flux d'entrée
( objet membre d'exposition uniquement* )
Val value_ la valeur stockée
( objet membre d'exposition uniquement* )

Fonctions membres

construit un basic_istream_view
(fonction membre publique)
retourne un itérateur
(fonction membre publique)
retourne std::default_sentinel
(fonction membre publique)
Hérité de std::ranges::view_interface
(C++23)
retourne un itérateur constant vers le début de la plage
(fonction membre publique de std::ranges::view_interface<D> )
(C++23)
renvoie un sentinelle pour l'itérateur constant de la plage
(fonction membre publique de std::ranges::view_interface<D> )

Bien que basic_istream_view soit dérivé de std::ranges::view_interface , il ne peut utiliser aucune des fonctions membres héritées.

(jusqu'à C++23)

std::ranges::basic_istream_view:: basic_istream_view

constexpr explicit
basic_istream_view ( std:: basic_istream < CharT, Traits > & stream ) ;
(depuis C++20)

Initialise stream_ avec std:: addressof ( stream ) , et initialise à zéro value_ .

std::ranges::basic_istream_view:: begin

constexpr auto begin ( ) ;
(depuis C++20)

Équivalent à * stream_ >> value_  ; return iterator  { * this } ; .

std::ranges::basic_istream_view:: end

constexpr std:: default_sentinel_t end ( ) const noexcept ;
(depuis C++20)

Retourne std:: default_sentinel .

Classes imbriquées

le type d'itérateur de basic_istream_view
( classe membre d'exposition uniquement* )

Exemple

#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';
}

Sortie :

/today/ /is/ /yesterday’s/ /tomorrow/
1.1, 2.2, 3.3, 4.4, 55, 66, 7.7, 8.8,

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 3568 C++20 P2325R3 a accidentellement rendu la valeur stockée initialisée par défaut rétabli à l'initialisation par valeur
P2325R3 C++20 le constructeur par défaut était fourni car
view doit être default_initializable
supprimé ainsi que
l'exigence
P2432R1 C++20 ranges::istream_view était un modèle de fonction
et ne suivait pas la convention de nommage
transformé en modèle d'alias ;
objets de point de personnalisation ajoutés

Voir aussi

itérateur d'entrée qui lit depuis std::basic_istream
(modèle de classe)