Namespaces
Variants

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

Depuis fr.cppreference.net
 
 
Bibliothèque des plages
Adaptateurs de plage
 
 
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 points de personnalisation
namespace views {
    template< class T >
    constexpr /* unspecified */ istream = /* unspecified */;
}
(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 de commodité pour les types de caractères char et wchar_t.
4) views::istream<T>(e) est équivalent à une expression à 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 dérivé de std::basic_istream<typename U::char_type, typename U::traits_type> de manière publique et non ambiguë, 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 exclusif au déplacement : il ne satisfait pas aux exigences de LegacyIterator, et donc ne fonctionne pas avec les algorithmes antérieurs à C++20.

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 Description
std::basic_istream<CharT, Traits>* stream_ un pointeur vers le flux d'entrée
(objet membre à titre d'exposé seulement*)
Val value_ la valeur stockée
(objet membre à titre d'exposé seulement*)

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 ranges::view_interface
(C++23)
renvoie un itérateur constant au début de la plage
(fonction membre publique de std::ranges::view_interface<D>)
(C++23)
renvoie une 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 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)