std::tuple_element<std::ranges::subrange>
De cppreference.com
<tbody>
</tbody>
| 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.Tipos miembro
| Tipo miembro | Definición |
type
|
(1-2) I(3-4) S
|
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.
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
>);
}
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) |