Namespaces
Variants

Standard library header <tuple> (C++11)

From cppreference.net
Standard library headers

Este encabezado es parte de la biblioteca de utilidades generales .

Contenidos

Includes

(C++20)
Soporte para operador de comparación de tres vías

Clases

(C++11)
implementa un contenedor de tamaño fijo que almacena elementos de posiblemente diferentes tipos
(plantilla de clase)
(C++11)
obtiene el número de elementos de un tipo tipo-tupla
(plantilla de clase)
obtiene los tipos de elementos de un tipo similar a una tupla
(plantilla de clase)
obtiene el tamaño de

un tuple
(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

(C++11)
marcador de posición para omitir un elemento al desempaquetar una tuple usando tie
(constante)

Funciones

(C++11)
crea un objeto tuple del tipo definido por los tipos de argumento
(plantilla de función)
(C++11)
crea un tuple de referencias a lvalue o desempaqueta un tuple en objetos individuales
(plantilla de función)
crea un tuple de referencias de reenvío
(plantilla de función)
(C++11)
crea un tuple concatenando cualquier número de tuplas
(plantilla de función)
accede al elemento especificado de la tupla
(plantilla de función)
(eliminado en C++20) (eliminado en C++20) (eliminado en C++20) (eliminado en C++20) (eliminado en C++20) (C++20)
compara lexicográficamente los valores en la tupla
(plantilla de función)
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)
construir un objeto con una tupla de argumentos
(plantilla de función)

Sinopsis

#include <compare>
namespace std {
  // plantilla de clase tuple
  template<class... Tipos>
    class tuple;
  // funciones de creación de tuplas
  inline constexpr /* sin especificar */ 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... Tuplas>
    constexpr tuple<CTypes...> tuple_cat(Tuples&&...);
  // llamando 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 auxiliares de tuple
  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 a 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... Tipos>
    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</*synth-three-way-result*/<TTypes, UTypes>...>
      operator<=>(const tuple<TTypes...>&, const tuple<UTypes...>&);
  // rasgos relacionados con el asignador
  template<class... Tipos, class Alloc>
    struct uses_allocator<tuple<Types...>, Alloc>;
  // algoritmos especializados
  template<class... Tipos>
    constexpr void
      swap(tuple<Types...>& x, tuple<Types...>& y) noexcept(/* ver descripción */);
  // clases auxiliares de tuple
  template<class T>
    inline constexpr size_t tuple_size_v = tuple_size<T>::value;
}
// deprecated
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... Tipos>
  class tuple {
  public:
    // construcción de tupla
    constexpr explicit(/* ver descripción */) tuple();
    constexpr explicit(/* ver descripción */)
      tuple(const Types&...);         // solo si sizeof...(Types) >= 1
    template<class... UTypes>
      constexpr explicit(/* ver descripción */)
        tuple(UTypes&&...);           // solo si sizeof...(Types) >= 1
    tuple(const tuple&) = default;
    tuple(tuple&&) = default;
    template<class... UTypes>
      constexpr explicit(/* ver descripción */) tuple(const tuple<UTypes...>&);
    template<class... UTypes>
      constexpr explicit(/* ver descripción */) tuple(tuple<UTypes...>&&);
    template<class U1, class U2>
      constexpr explicit(/* ver descripción */)
        tuple(const pair<U1, U2>&);   // solo si sizeof...(Types) == 2
    template<class U1, class U2>
      constexpr explicit(/* ver descripción */)
        tuple(pair<U1, U2>&&);        // solo si sizeof...(Types) == 2
    // constructores extendidos con asignador
    template<class Alloc>
      constexpr explicit(/* ver descripción */)
        tuple(allocator_arg_t, const Alloc& a);
    template<class Alloc>
      constexpr explicit(/* ver descripción */)
        tuple(allocator_arg_t, const Alloc& a, const Types&...);
    template<class Alloc, class... UTypes>
      constexpr explicit(/* ver 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(/* ver descripción */)
        tuple(allocator_arg_t, const Alloc& a, const tuple<UTypes...>&);
    template<class Alloc, class... UTypes>
      constexpr explicit(/* ver descripción */)
        tuple(allocator_arg_t, const Alloc& a, tuple<UTypes...>&&);
    template<class Alloc, class U1, class U2>
      constexpr explicit(/* ver descripción */)
        tuple(allocator_arg_t, const Alloc& a, const pair<U1, U2>&);
    template<class Alloc, class U1, class U2>
      constexpr explicit(/* ver descripción */)
        tuple(allocator_arg_t, const Alloc& a, pair<U1, U2>&&);
    // asignación de tupla
    constexpr tuple& operator=(const tuple&);
    constexpr tuple& operator=(tuple&&) noexcept(/* ver 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>&); // solo si sizeof...(Types) == 2
    template<class U1, class U2>
      constexpr tuple& operator=(pair<U1, U2>&&);      // solo si sizeof...(Types) == 2
    // intercambio de tupla
    constexpr void swap(tuple&) noexcept(/* ver 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...>;
}