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
Definiert im Header <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) (seit C++20)
Hilfs-Templates
template < class Val >
using istream_view = ranges :: basic_istream_view < Val, char > ;
(2) (seit C++20)
template < class Val >
using wistream_view = ranges :: basic_istream_view < Val, wchar_t > ;
(3) (seit C++20)
Anpassungspunkt-Objekte
namespace views {

template < class T >
constexpr /* nicht spezifiziert */ istream = /* nicht spezifiziert */ ;

}
(4) (seit C++20)
Hilfs-Konzepte
template < class Val, class CharT, class Traits >

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

} ;
(5) ( nur zur Darstellung* )
1) Eine Bereichsfabrik, die eine Sequenz von Elementen durch wiederholtes Aufrufen von operator >> erzeugt.
2,3) Bequeme Alias-Templates für Zeichentypen char und wchar_t .
4) views :: istream < T > ( e ) ist ausdrucksäquivalent zu ranges :: basic_istream_view < T, typename U :: char_type , typename U :: traits_type > ( e ) für alle geeigneten Teilausdrücke e , wobei U std:: remove_reference_t < decltype ( e ) > ist.
Das Programm ist fehlerhaft, wenn U nicht sowohl öffentlich als auch eindeutig von std:: basic_istream < typename U :: char_type , typename U :: traits_type > abgeleitet ist, was zu einem Substitutionsfehler führen kann.
5) Das exposition-only Konzept /*stream-extractable*/ < Val, CharT, Traits > ist erfüllt, wenn ein Lvalue vom Typ Val aus einem Lvalue vom Typ std:: basic_istream < CharT, Traits > extrahiert werden kann.

Der Iteratortyp von basic_istream_view ist nur verschiebbar: Er erfüllt nicht die LegacyIterator -Anforderungen und funktioniert daher nicht mit prä-C++20- Algorithmen .

Inhaltsverzeichnis

Customization Point Objects

Der Name views::istream<T> bezeichnet ein Customization Point Object , welches ein konstantes Function Object eines Literal semiregular Klassen-Typs ist. Weitere Details finden Sie unter CustomizationPointObject .

Datenmitglieder

Member Definition
std:: basic_istream < CharT, Traits > * stream_ ein Zeiger auf den Eingabestream
( exposition-only member object* )
Val value_ der gespeicherte Wert
( exposition-only member object* )

Memberfunktionen

erstellt einen basic_istream_view
(öffentliche Elementfunktion)
gibt einen Iterator zurück
(öffentliche Elementfunktion)
gibt std::default_sentinel zurück
(öffentliche Elementfunktion)
Geerbt von std::ranges::view_interface
(C++23)
gibt einen konstanten Iterator zum Anfang des Bereichs zurück
(öffentliche Elementfunktion von std::ranges::view_interface<D> )
(C++23)
gibt einen Sentinel für den konstanten Iterator des Bereichs zurück
(öffentliche Elementfunktion von std::ranges::view_interface<D> )

Obwohl basic_istream_view von std::ranges::view_interface abgeleitet ist, kann es keine der geerbten Memberfunktionen verwenden.

(bis C++23)

std::ranges::basic_istream_view:: basic_istream_view

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

Initialisiert stream_ mit std:: addressof ( stream ) und wertinitialisiert value_ .

std::ranges::basic_istream_view:: begin

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

Entspricht * stream_ >> value_  ; return iterator  { * this } ; .

std::ranges::basic_istream_view:: end

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

Gibt std:: default_sentinel zurück.

Geschachtelte Klassen

Der Iteratortyp von basic_istream_view
( Nur zur Darstellung verwendete Memberklasse* )

Beispiel

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

Ausgabe:

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

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 3568 C++20 P2325R3 machte versehentlich den gespeicherten Wert default-initialized wiederhergestellt zu value-initialization
P2325R3 C++20 Standardkonstruktor wurde bereitgestellt da
view muss default_initializable sein
entfernt zusammen mit
der Anforderung
P2432R1 C++20 ranges::istream_view war eine Funktionsvorlage
und folgte nicht der Namenskonvention
zu einer Alias-Vorlage gemacht;
Customization Point Objects hinzugefügt

Siehe auch

Eingabe-Iterator, der aus std::basic_istream liest
(Klassentemplate)