Was ist eine istream_view und wann verwende ich eine?

Dec 12 2020

Anscheinend hat C ++ 20 ein neues std::istreamKonstrukt : 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_viewund das ist ein Stub.

Antworten

3 einpoklum Dec 12 2020 at 05:32

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 istreamist ein Strom von Zeichen , nicht von TElementen beliebigen Typs Ihrer Wahl. Die träge Anwendung des Parsens dieser Zeichen in aufeinanderfolgende Zeichen Tist 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 >> tfür tTypen 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_viewist:

  • @Barry hat als das Äquivalent einer Coroutine beschrieben, die Ts 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".