std::tuple_element<std::ranges::subrange>
Von cppreference.com
| 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
Führen Sie diesen Code aus
#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 |
| (C++11) |
erhält die Elementtypen eines Tupel-ähnlichen Typs (Klassenvorlage) |
| erhält die Größe eines std::ranges::subrange (Klassentemplate-Spezialisierung) |