Namensräume
Varianten
Aktionen

std::ranges::ref_view

Von cppreference.com
< cpp‎ | ranges
 
 
Bereichsbibliothek
Range-Adaptoren
 
Definiert in der Header-Datei <ranges>
template< ranges::range R >

    erfordert std::is_object_v<R>
class ref_view

    : public ranges::view_interface<ref_view<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>) [edit]
(C++23)
gibt ein Sentinel für den konstanten Iterator des Bereichs zurück
(public member function of std::ranges::view_interface<D>) [edit]
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>) [edit]
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>) [edit]
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>) [edit]
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>) [edit]

std::ranges::ref_view::ref_view

template< /*different-from*/<ref_view> T >

    erfordert std::convertible_to<T, R&> && erfordert { _FUN(std::declval<T>()); }

constexpr ref_view( T&& 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 bereitgestellt
muss default_initializable sein
entfernt zusammen mit der Anforderung

[edit] Siehe auch

CopyConstructible und CopyAssignable Referenz-Wrapper
(Klassen-Template) [bearbeiten]
ein view mit exklusivem Besitz eines range
(Klassen-Template) [edit]
ein view, der alle Elemente eines range enthält
(Alias-Template) (Range-Adaptor-Objekt)[edit]