Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | ranges
 
 
Bereichsbibliothek
Range-Adaptoren
 
 
Definiert in der Header-Datei <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)
Hilfsschablonen
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)
Customization Point Objects
namespace views {

    template< class T >
    constexpr /* unspecified */ istream = /* unspecified */;

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

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

    };
(5) (nur Exposition*)
1) Ein Factory-Bereich, der 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 beliebige geeignete Unterausdrücke e, wobei U std::remove_reference_t<decltype(e)> ist.
Das Programm ist schlecht formuliert, 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 für Ausstellungszwecke definierte Konzept /*stream-extractable*/<Val, CharT, Traits> ist erfüllt, wenn ein L-Wert vom Typ Val aus einem L-Wert vom Typ std::basic_istream<CharT, Traits> extrahiert werden kann.

Der Iteratortyp von basic_istream_view ist Move-only: Er erfüllt nicht die LegacyIterator-Anforderungen und funktioniert daher nicht mit Algorithmen vor C++20.

Inhalt

Customization Point Objects

Der Name views::istream<T> bezeichnet ein Customization Point Object, ein konstantes Funktionsobjekt vom Typ Literal semiregular. Zu Ausstellungszwecken wird die um cv-Qualifizierer bereinigte Version seines Typs als __istream_fn<T> bezeichnet.

Alle Instanzen von __istream_fn<T> sind gleich. Die Effekte des Aufrufs verschiedener Instanzen des Typs __istream_fn<T> auf dieselben Argumente sind äquivalent, unabhängig davon, ob der Ausdruck, der die Instanz bezeichnet, ein L-Wert oder R-Wert ist und ob er const-qualifiziert ist oder nicht (eine volatile-qualifizierte Instanz muss jedoch nicht aufrufbar sein). Daher kann views::istream<T> frei kopiert werden und seine Kopien können austauschbar verwendet werden.

Gegeben eine Menge von Typen Args..., wenn std::declval<Args>()... die Anforderungen für Argumente an views::istream<T> oben erfüllen, modelliert __istream_fn<T>

Andernfalls nimmt kein Funktionsaufrufoperator von __istream_fn<T> an der Überladungsauflösung teil.

[edit] Datenmember

Mitglied Definition
std::basic_istream<CharT, Traits>* stream_ Ein Zeiger auf den Eingabestrom.
((exposition-only member object*)
Val value_ Der gespeicherte Wert.
((exposition-only member object*)

[edit] Memberfunktionen

Konstruiert eine basic_istream_view.
(öffentliche Memberfunktion)
Gibt einen Iterator zurück.
(öffentliche Memberfunktion)
Gibt std::default_sentinel zurück.
(öffentliche Memberfunktion)
Geerbt von std::ranges::view_interface
(C++23)
gibt einen konstanten Iterator zum Anfang des Bereichs zurück
(public member function of std::ranges::view_interface<D>) [edit]
(C++23)
gibt ein Sentinel für den konstanten Iterator des Bereichs zurück
(public member function of std::ranges::view_interface<D>) [edit]

Obwohl basic_istream_view von std::ranges::view_interface abgeleitet ist, kann es keine seiner 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)

Äquivalent zu *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.

[edit] Verschachtelte Klassen

Der Iteratortyp von basic_istream_view.
((nur zur Veranschaulichung)*)

[edit] 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,

[edit] 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 den gespeicherten Wert versehentlich standardmäßig initialisiert wieder auf Wertinitialisierung zurückgesetzt
P2325R3 C++20 Standardkonstruktor wurde bereitgestellt als
view muss default_initializable sein
entfernt zusammen mit
die Anforderung
P2432R1 C++20 ranges::istream_view war eine Funktionvorlage
und folgte nicht der Namenskonvention
Aliasvorlage erstellt;
Customization Point Objects hinzugefügt

[edit] Siehe auch

Eingabe-Iterator, der aus std::basic_istream liest
(Klassenvorlage) [bearbeiten]