Archivo de encabezado de la biblioteca estándar <tuple>
De cppreference.com
Este archivo de encabezado es parte de la bitlioteca de utilidades generales.
Incluye | |
| <compare> (desde C++20) |
Clases | |
(C++11) |
Implementa un contenedor de tamaño fijo, que contiene elementos de tipos posiblemente diferentes. (plantilla de clase) |
| Obtiene el tamaño de una tupla en tiempo de compilación. (especialización de plantilla de clase) | |
| Obtiene el tipo del elemento especificado. (especialización de plantilla de clase) | |
| Especializa el rasgo de tipo std::uses_allocator. (especialización de plantilla de clase) | |
Constantes | |
| Marcador de posición para saltarse un elemento cuando se desempaca una tupla utilizando tie. (constante) | |
Funciones | |
| Crea un objeto de tupla del tipo definido por los tipos de argumentos. (plantilla de función) | |
| Crea una tupla de referencias lvalue o desempaca una tupla en objetos individuales. (plantilla de función) | |
| Crea una tupla de referencias r-valor. (plantilla de función) | |
| Crea una tupla mediante la concatenación de cualquier número de tuplas. (plantilla de función) | |
| La tupla accede al elemento especificado. (plantilla de función) | |
| Compara lexicográficamente los valores de la tupla (plantilla de función) | |
(C++11) |
Especializa el algoritmo std::swap. (plantilla de función) |
(C++17) |
Llama a una función con una tupla de argumentos. (plantilla de función) |
(C++17) |
Construye un objeto con una tupla de argumentos. (plantilla de función) |
Sinopsis
#include <compare>
namespace std {
// plantilla de clase tuple
template<class... Types>
class tuple;
// funciones de creación de tuplas
inline constexpr /* no especificado */ ignore;
template<class... TTypes>
constexpr tuple<unwrap_ref_decay_t<TTypes>...> make_tuple(TTypes&&...);
template<class... TTypes>
constexpr tuple<TTypes&&...> forward_as_tuple(TTypes&&...) noexcept;
template<class... TTypes>
constexpr tuple<TTypes&...> tie(TTypes&...) noexcept;
template<class... Tuples>
constexpr tuple<CTypes...> tuple_cat(Tuples&&...);
// llamada a una función con una tupla de argumentos
template<class F, class Tuple>
constexpr decltype(auto) apply(F&& f, Tuple&& t);
template<class T, class Tuple>
constexpr T make_from_tuple(Tuple&& t);
// clases asistentes de tuplas
template<class T> struct tuple_size; // no definido
template<class T> struct tuple_size<const T>;
template<class... Types> struct tuple_size<tuple<Types...>>;
template<size_t I, class T> struct tuple_element; // no definido
template<size_t I, class T> struct tuple_element<I, const T>;
template<size_t I, class... Types>
struct tuple_element<I, tuple<Types...>>;
template<size_t I, class T>
using tuple_element_t = typename tuple_element<I, T>::type;
// acceso de elementos
template<size_t I, class... Types>
constexpr tuple_element_t<I, tuple<Types...>>& get(tuple<Types...>&) noexcept;
template<size_t I, class... Types>
constexpr tuple_element_t<I, tuple<Types...>>&& get(tuple<Types...>&&) noexcept;
template<size_t I, class... Types>
constexpr const tuple_element_t<I, tuple<Types...>>&
get(const tuple<Types...>&) noexcept;
template<size_t I, class... Types>
constexpr const tuple_element_t<I, tuple<Types...>>&&
get(const tuple<Types...>&&) noexcept;
template<class T, class... Types>
constexpr T& get(tuple<Types...>& t) noexcept;
template<class T, class... Types>
constexpr T&& get(tuple<Types...>&& t) noexcept;
template<class T, class... Types>
constexpr const T& get(const tuple<Types...>& t) noexcept;
template<class T, class... Types>
constexpr const T&& get(const tuple<Types...>&& t) noexcept;
// operadores relacionales
template<class... TTypes, class... UTypes>
constexpr bool operator==(const tuple<TTypes...>&, const tuple<UTypes...>&);
template<class... TTypes, class... UTypes>
constexpr common_comparison_category_t</*resultado de tres vías sintetizado*/<TTypes, UTypes>...>
operator<=>(const tuple<TTypes...>&, const tuple<UTypes...>&);
// rasgos relacionados con asignadores de memoria
template<class... Types, class Alloc>
struct uses_allocator<tuple<Types...>, Alloc>;
// algoritmos especializados
template<class... Types>
constexpr void
swap(tuple<Types...>& x, tuple<Types...>& y) noexcept(/* véase descripción */);
// clases asistentes de tuplas
template<class T>
inline constexpr size_t tuple_size_v = tuple_size<T>::value;
}
// en desuso
namespace std {
template<class T> class tuple_size<volatile T>;
template<class T> class tuple_size<const volatile T>;
template<size_t I, class T> class tuple_element<I, volatile T>;
template<size_t I, class T> class tuple_element<I, const volatile T>;
}
Plantilla de clase std::tuple
namespace std {
template<class... Types>
class tuple {
public:
// construcción de tuplas
constexpr explicit(/* véase descripción */) tuple();
constexpr explicit(/* véase descripción */)
tuple(const Types&...); // solamente si sizeof...(Types) >= 1
template<class... UTypes>
constexpr explicit(/* véase descripción */)
tuple(UTypes&&...); // solamente si sizeof...(Types) >= 1
tuple(const tuple&) = default;
tuple(tuple&&) = default;
template<class... UTypes>
constexpr explicit(/* véase descripción */) tuple(const tuple<UTypes...>&);
template<class... UTypes>
constexpr explicit(/* véase descripción */) tuple(tuple<UTypes...>&&);
template<class U1, class U2>
constexpr explicit(/* véase descripción */)
tuple(const pair<U1, U2>&); // solamente si sizeof...(Types) == 2
template<class U1, class U2>
constexpr explicit(/* véase descripción */)
tuple(pair<U1, U2>&&); // solamente si sizeof...(Types) == 2
// constructores extendidos con asignadores de memoria
template<class Alloc>
constexpr explicit(/* véase descripción */)
tuple(allocator_arg_t, const Alloc& a);
template<class Alloc>
constexpr explicit(/* véase descripción */)
tuple(allocator_arg_t, const Alloc& a, const Types&...);
template<class Alloc, class... UTypes>
constexpr explicit(/* véase descripción */)
tuple(allocator_arg_t, const Alloc& a, UTypes&&...);
template<class Alloc>
constexpr tuple(allocator_arg_t, const Alloc& a, const tuple&);
template<class Alloc>
constexpr tuple(allocator_arg_t, const Alloc& a, tuple&&);
template<class Alloc, class... UTypes>
constexpr explicit(/* véase descripción */)
tuple(allocator_arg_t, const Alloc& a, const tuple<UTypes...>&);
template<class Alloc, class... UTypes>
constexpr explicit(/* véase descripción */)
tuple(allocator_arg_t, const Alloc& a, tuple<UTypes...>&&);
template<class Alloc, class U1, class U2>
constexpr explicit(/* véase descripción */)
tuple(allocator_arg_t, const Alloc& a, const pair<U1, U2>&);
template<class Alloc, class U1, class U2>
constexpr explicit(/* véase descripción */)
tuple(allocator_arg_t, const Alloc& a, pair<U1, U2>&&);
// asignación de tuplas
constexpr tuple& operator=(const tuple&);
constexpr tuple& operator=(tuple&&) noexcept(/* véase descripción */);
template<class... UTypes>
constexpr tuple& operator=(const tuple<UTypes...>&);
template<class... UTypes>
constexpr tuple& operator=(tuple<UTypes...>&&);
template<class U1, class U2>
constexpr tuple& operator=(const pair<U1, U2>&); // solamente si sizeof...(Types) == 2
template<class U1, class U2>
constexpr tuple& operator=(pair<U1, U2>&&); // solamente si sizeof...(Types) == 2
// intercambio de tuplas
constexpr void swap(tuple&) noexcept(/* véase descripción */);
};
template<class... UTypes>
tuple(UTypes...) -> tuple<UTypes...>;
template<class T1, class T2>
tuple(pair<T1, T2>) -> tuple<T1, T2>;
template<class Alloc, class... UTypes>
tuple(allocator_arg_t, Alloc, UTypes...) -> tuple<UTypes...>;
template<class Alloc, class T1, class T2>
tuple(allocator_arg_t, Alloc, pair<T1, T2>) -> tuple<T1, T2>;
template<class Alloc, class... UTypes>
tuple(allocator_arg_t, Alloc, tuple<UTypes...>) -> tuple<UTypes...>;
}