std::tuple_element<std::pair>
De cppreference.com
Definido en el archivo de encabezado <utility> | ||
template<std::size_t I, class T1, class T2 > struct tuple_element<I, std::pair<T1, T2>>; | (desde C++11) | |
Las especializaciones parciales de std::tuple_element para pares proporcionan acceso en tiempo de compilación a los tipos de los elementos del par, utilizando una sintaxis similar a una tupla. El programa está mal formado si I >= 2
.
Contenido |
[editar]Tipos miembro
Tipo miembro | Definición |
type | T1 si I == 0 T2 si I == 1 |
[editar]Posible implementación
template<std::size_t I, typename T>struct tuple_element; template<std::size_t I, typename T1, typename T2>struct tuple_element<I, std::pair<T1,T2>>{ static_assert(I <2, "std::pair tiene solo dos elementos!");}; template<typename T1, typename T2>struct tuple_element<0, std::pair<T1,T2>>{using type = T1;}; template<typename T1, typename T2>struct tuple_element<1, std::pair<T1,T2>>{using type = T2;}; |
[editar]Ejemplo
Ejecuta este código
#include <tuple>#include <iostream>#include <string> namespace detalle { template<std::size_t>struct index_tag {explicitconstexpr index_tag()=default;}; template<class T, class U>constexpr T get_val_dispatch(std::pair<T, U>const& pair, index_tag<0>){return pair.first;} template<class T, class U>constexpr U get_val_dispatch(std::pair<T, U>const& pair, index_tag<1>){return pair.second;} }// namespace detalle template<std::size_t N, class T, class U>autoconstexpr get_val(std::pair<T, U>const& pair)->typenamestd::tuple_element<N, std::pair<T, U>>::type{return detalle::get_val_dispatch(pair, detalle::index_tag<N>{});} int main(){auto var =std::make_pair(1, std::string{"uno"}); std::cout<< get_val<0>(var)<<" = "<< get_val<1>(var);}
Salida:
1 = uno
[editar]Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
---|---|---|---|
LWG 2974 | C++11 | El índice fuera de límites se refería a la plantilla primaria no definida. | Se hizo mal formado (error insalvable). |
[editar]Véase también
Vínculo estructurado(C++17) | Vincula los nombres especificados a subobjetos o elementos de una tupla del inicializador. |
Obtiene el tipo del elemento especificado. (especialización de plantilla de clase) | |
se obtiene el tipo de los elementos de array Original: obtains the type of the elements of array The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (especialización de plantilla de clase) | |
Obtiene el tipo del iterador o el centinela de un subrango (std::ranges::subrange). (especialización de plantilla de clase) | |
(C++11) | Obtiene el tamaño de un par. (especialización de plantilla de clase) |