Namensräume
Varianten
Aktionen

std::tuple_element<std::ranges::subrange>

Von cppreference.com
< cpp‎ | ranges‎ | subrange
 
 
Bereichsbibliothek
Range-Adaptoren
 
 
Definiert in der Header-Datei <ranges>
template< class I, class S, ranges::subrange_kind K >
struct tuple_element<0, ranges::subrange<I, S, K>>;
(1) (seit C++20)
template< class I, class S, ranges::subrange_kind K >
struct tuple_element<0, const ranges::subrange<I, S, K>>;
(2) (seit C++20)
template< class I, class S, ranges::subrange_kind K >
struct tuple_element<1, ranges::subrange<I, S, K>>;
(3) (seit C++20)
template< class I, class S, ranges::subrange_kind K >
struct tuple_element<1, const ranges::subrange<I, S, K>>;
(4) (seit C++20)

Die partiellen Spezialisierungen von std::tuple_element für std::ranges::subrange bieten zur Compile-Zeit Zugriff auf den Iterator- oder Sentinel-Typ eines subrange mittels Tupel-ähnlicher Syntax. Sie werden zur Unterstützung von Structured Bindings bereitgestellt.

1,2) Ermittelt den Iteratortyp, d.h. I.
3,4) Ermittelt den Sentinel-Typ, d.h. S.

Inhalt

[edit] Member types

Mitgliedertyp Definition
type (1,2) I
(3,4) S

[edit] Notes

Da get-Funktionen für subrange Iteratoren und Sentinels per Wert zurückgeben, wird der const-Qualifikator nicht zu den Ergebnistypen hinzugefügt, wenn der subrange mit const qualifiziert ist (aber nicht mit volatile).

Wenn der subrange mit volatile qualifiziert ist, werden die Ergebnistypen ebenfalls mit volatile qualifiziert, da die partiellen Spezialisierungen für volatile oder const volatile Typen verwendet werden. Eine solche Verwendung ist veraltet.

[edit] Example

#include <iterator>
#include <list>
#include <ranges>
#include <type_traits>
 
int main()
{
    std::list<int> list{3, 1, 4, 1, 5, 9, 2, 6};
 
    std::ranges::subrange subrange
    {
        std::counted_iterator{std::begin(list), 4},
        std::default_sentinel
    };
 
    static_assert(
        std::is_same_v<
            std::tuple_element_t<0, decltype(subrange)>,
            // implementation-defined type:
            std::counted_iterator<std::_List_iterator<int>>
            >);
 
    static_assert(
        std::is_same_v<
            std::tuple_element_t<1, decltype(subrange)>,
            std::default_sentinel_t
            >);
}

[edit] See also

Strukturierte Bindung (C++17) bindet die angegebenen Namen an Unterobjekte oder Tuple-Elemente des Initialisierers[bearbeiten]
erhält die Elementtypen eines Tupel-ähnlichen Typs
(Klassenvorlage) [edit]
erhält die Größe eines std::ranges::subrange
(Klassentemplate-Spezialisierung) [bearbeiten]