std::ranges::ref_view
| Definiert in der Header-Datei <ranges> |
||
| template< ranges::range R > erfordert std::is_object_v<R> |
(seit C++20) | |
ref_view ist eine view der Elemente eines anderen range. Sie umschließt eine Referenz auf dieses range.
Inhalt |
[edit] Datenelemente
| Member-Name | Definition |
r_ (private) |
Ein Zeiger vom Typ R* auf das zugrundeliegende Range.((exposition-only member object*) |
[edit] Member-Funktionen
konstruiert eine ref_view, die auf das gegebene Range verweist(öffentliche Memberfunktion) | |
| gibt die Referenz auf das referenzierte Range zurück (öffentliche Memberfunktion) | |
| gibt den Anfangsiterator des referenzierten Ranges zurück (öffentliche Memberfunktion) | |
| gibt den Sentinel des referenzierten Ranges zurück (öffentliche Memberfunktion) | |
| prüft, ob das referenzierte Range leer ist (öffentliche Memberfunktion) | |
gibt die Größe des referenzierten sized_range zurück(öffentliche Memberfunktion) | |
gibt den Zeiger auf den Anfang des referenzierten contiguous_range 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>) |
| gibt zurück, ob die abgeleitete Ansicht nicht leer ist, bereitgestellt nur, wenn ranges::empty darauf anwendbar ist (public member function of std::ranges::view_interface<D>) | |
gibt das erste Element in der abgeleiteten View zurück, bereitgestellt, wenn sie forward_range erfüllt(öffentliche Member-Funktion von std::ranges::view_interface<D>) | |
gibt das letzte Element in der abgeleiteten View zurück, nur bereitgestellt, wenn sie bidirectional_range und common_range erfüllt(öffentliche Member-Funktion von std::ranges::view_interface<D>) | |
gibt das n-te Element in der abgeleiteten View zurück, nur bereitgestellt, wenn sie random_access_range erfüllt(öffentliche Member-Funktion von std::ranges::view_interface<D>) | |
std::ranges::ref_view::ref_view
| template< /*different-from*/<ref_view> T > erfordert std::convertible_to<T, R&> && erfordert { _FUN(std::declval<T>()); } |
(seit C++20) | |
Initialisiert r_ mit std::addressof(static_cast<R&>(std::forward<T>(t))).
/*different-from*/<T, U> ist erfüllt, wenn und nur wenn std::remove_cvref_t<T> und std::remove_cvref_t<U> nicht denselben Typ haben und Überladungen von _FUN als void _FUN(R&); void _FUN(R&&) = delete; deklariert sind.
Parameter
| t | - | Range zur Referenz |
std::ranges::ref_view::base
| constexpr R& base() const; |
(seit C++20) | |
Äquivalent zu return *r_;.
std::ranges::ref_view::begin
| constexpr ranges::iterator_t<R> begin() const; |
(seit C++20) | |
Äquivalent zu return ranges::begin(*r_);.
std::ranges::ref_view::end
| constexpr ranges::sentinel_t<R> end() const; |
(seit C++20) | |
Äquivalent zu return ranges::end(*r_);.
std::ranges::ref_view::empty
| constexpr bool empty() const erfordert requires { ranges::empty(*r_); }; |
(seit C++20) | |
Äquivalent zu return ranges::empty(*r_);.
std::ranges::ref_view::size
| constexpr auto size() const erfordert ranges::sized_range<R>; |
(seit C++20) | |
Äquivalent zu return ranges::size(*r_);.
std::ranges::ref_view::data
| constexpr auto data() const erfordert ranges::contiguous_range<R>; |
(seit C++20) | |
Äquivalent zu return ranges::data(*r_);.
[edit] Deduktionshilfen
| template< class R > ref_view( R& ) -> ref_view<R>; |
(seit C++20) | |
[edit] Hilfsschablonen
| template< class T > constexpr bool enable_borrowed_range<ranges::ref_view<T>> = true; |
(seit C++20) | |
Diese Spezialisierung von std::ranges::enable_borrowed_range lässt ref_view borrowed_range erfüllen.
[edit] Beispiel
#include <iostream> #include <ranges> int main() { const std::string s{"cosmos"}; const std::ranges::take_view tv{s, 3}; const std::ranges::ref_view rv{tv}; std::cout << std::boolalpha << "call empty() : " << rv.empty() << '\n' << "call size() : " << rv.size() << '\n' << "call begin() : " << *rv.begin() << '\n' << "call end() : " << *(rv.end() - 1) << '\n' << "call data() : " << rv.data() << '\n' << "call base() : " << rv.base().size() << '\n' // ~> tv.size() << "range-for : "; for (const auto c : rv) std::cout << c; std::cout << '\n'; }
Ausgabe
call empty() : false call size() : 3 call begin() : c call end() : s call data() : cosmos call base() : 3 range-for : cos
[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 |
|---|---|---|---|
| P2325R3 | C++20 | Standardkonstruktor wurde als view bereitgestelltmuss default_initializable sein |
entfernt zusammen mit der Anforderung |
[edit] Siehe auch
| (C++11) |
CopyConstructible und CopyAssignable Referenz-Wrapper(Klassen-Template) |
| (C++20) |
ein view mit exklusivem Besitz eines range(Klassen-Template) |
| (C++20) |
ein view, der alle Elemente eines range enthält(Alias-Template) (Range-Adaptor-Objekt) |