Was ist eine istream_view und wann verwende ich eine?
Anscheinend hat C ++ 20 ein neues std::istream
Konstrukt : std::istream_view
. Die cppreference-Seite darauf ist momentan ein Stub † . Also, was ist eine "Ansicht von einem istream
" und wofür kann ich sie verwenden?
† - Ok, technisch leitet es auf eine Seite um std::basic_istream_view
und das ist ein Stub.
Antworten
An std::istream_view<T>
ist ein Bereich ; und insbesondere einen Bereich, der als Ansicht gebildet wird . Diese Ergänzung zur Standardbibliothek ähnelt der Beschreibung unter std::ranges::views
- außer dass es sich nicht um eine Ansicht eines beliebigen Bereichs handelt, sondern um eine Ansicht eines std::istream
.
Also, welche "Anzeige" wird auf eine angewendet std::istream
? Rückruf istream
ist ein Strom von Zeichen , nicht von T
Elementen beliebigen Typs Ihrer Wahl. Die träge Anwendung des Parsens dieser Zeichen in aufeinanderfolgende Zeichen T
ist das "Anzeigen" des Istreams. Das heißt, das k - te Element std::istream_view<T>(is)
ist , was Sie das k - ten Mal in Folge erhalten würden is >> t
für t
Typen T
.
Sie würden ein std::istream_view
( vorsichtig ) verwenden, wenn Sie Ihren Code, der mit Bereichen arbeitet, direkt auf Eingabedaten anwenden möchten, anstatt zuerst Ihre Eingabe in eine Datenstruktur auf eine "altmodischere" Weise zu analysieren und dann an dieser Struktur zu arbeiten als Bereich.
Andere nehmen an, was ein std::istream_view
ist:
- @Barry hat als das Äquivalent einer Coroutine beschrieben, die
T
s aus einem Istream analysiert; Lesen Sie diese Antwort für Details (beachten Sie, dass es sich um die Istream-Ansicht in den Bereichen-v3 handelt, von denen ein Großteil zur Standardbereichsbibliothek wurde). - @NicolBolas betrachtet dies als das Ergebnis des "Umschließens
std::istream_iterator<T>
einer C ++ 20-Ansichtsschnittstelle".