std::tuple_element<std::ranges::subrange>
De cppreference.com
Definido en el archivo de encabezado <ranges>
|
||
template< class I, class S, ranges::subrange_kind K > struct tuple_element<0, ranges::subrange<I, S, K>>; |
(1) | (desde C++20) |
template< class I, class S, ranges::subrange_kind K > struct tuple_element<0, const ranges::subrange<I, S, K>>; |
(2) | (desde C++20) |
template< class I, class S, ranges::subrange_kind K > struct tuple_element<1, ranges::subrange<I, S, K>>; |
(3) | (desde C++20) |
template< class I, class S, ranges::subrange_kind K > struct tuple_element<1, const ranges::subrange<I, S, K>>; |
(4) | (desde C++20) |
Las especializaciones parciales de std::tuple_element para std::ranges::subrange proporcionan acceso en tiempo de compilación al tipo iterador o tipo centinela de un subrange
, usando una sintaxis similar a una tupla. Se proporcionan para apoyo de vínculos estructurados.
1-2) Obtiene el tipo iterador, es decir,
I
.3-4) Obtiene el tipo dentinela, es decir,
S
.Contenido |
[editar] Tipos miembro
Tipo miembro | Definición |
type
|
(1-2) I (3-4) S
|
[editar] Notas
Como las funciones get
para subrange
devuelven iteradores y centinelas por valor, no se añade un calificador const a los tipos resultado cuando el subrange
está calificado const (pero no calificado volatile).
Si el subrange
está calificado volatile, los tipos resultado también están calificados volatile porque se utiliza la especialización parcial para tipos volatile o const volatile. Tal uso está obsoleto.
[editar] Ejemplo
Ejecuta este código
#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)>, // tipos definidos por la implementación: std::counted_iterator<std::_List_iterator<int>> >); static_assert( std::is_same_v< std::tuple_element_t<1, decltype(subrange)>, std::default_sentinel_t >); }
[editar] Véase también
Vínculo estructurado (C++17) | Vincula los nombres especificados a subobjetos o elementos de una tupla del inicializador. |
(C++11) |
Obtiene los tipos de elementos de un tipo similar a una tupla. (plantilla de clase) |
Obtiene el número de componentes de un subrango (std::ranges::subrange). (especialización de plantilla de clase) |