std::ranges::views::istream, std::ranges::basic_istream_view, std::ranges::istream_view, std::ranges::wistream_view
| 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) |
| Customization-Point-Objekte |
||
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 zur Veranschaulichung*) |
operator>> aufgerufen wird.char und wchar_t.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 Unterausdrücke e, wobei U ist std::remove_reference_t<decltype(e)>.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./*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 nur verschiebbar: Er erfüllt nicht die LegacyIterator-Anforderungen und funktioniert daher nicht mit Algorithmen vor C++20.
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
.
Datenelemente
| Element | Beschreibung |
std::basic_istream<CharT, Traits>* stream_
|
ein Zeiger auf den Eingabestrom (Nur-zur-Darstellung-Elementobjekt*) |
Val value_
|
der gespeicherte Wert (Nur-zur-Darstellung-Elementobjekt*) |
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 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 |
(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) |