std::ranges::views:: istream, std::ranges::basic_istream_view, std::ranges::istream_view, std::ranges::wistream_view
| Definiert in der Header-Datei <ranges> |
||
| template< std::movable Val, class CharT, class Traits = std::char_traits<CharT> > |
(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 > |
(4) | (seit C++20) |
| Hilfskonzepte |
||
template< class Val, class CharT, class Traits > concept /*stream-extractable*/ = |
(5) | (nur Exposition*) |
U std::remove_reference_t<decltype(e)> ist.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.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>
- std::invocable<__istream_fn<T>, Args...>,
- std::invocable<const __istream_fn<T>, Args...>,
- std::invocable<__istream_fn<T>&, Args...>, und
- std::invocable<const __istream_fn<T>&, Args...>.
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>) |
| (C++23) |
gibt ein Sentinel für den konstanten Iterator des Bereichs zurück (public member function of std::ranges::view_interface<D>) |
|
Obwohl |
(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 alsview muss default_initializable sein |
entfernt zusammen mit die Anforderung |
| P2432R1 | C++20 | ranges::istream_view war eine Funktionvorlageund folgte nicht der Namenskonvention |
Aliasvorlage erstellt; Customization Point Objects hinzugefügt |
[edit] Siehe auch
| Eingabe-Iterator, der aus std::basic_istream liest (Klassenvorlage) |