Espacios de nombres
Variantes
Acciones

Archivo de encabezado de la biblioteca estándar <tuple>

De cppreference.com
< cpp‎ | header
 
 
Archivos de encabezado de la biblioteca estándar
 

Este archivo de encabezado es parte de la bitlioteca de utilidades generales.

Contenido

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) [editar]
Obtiene el tamaño de una tupla en tiempo de compilación.
(especialización de plantilla de clase) [editar]
Obtiene el tipo del elemento especificado.
(especialización de plantilla de clase) [editar]
Especializa el rasgo de tipo std::uses_allocator.
(especialización de plantilla de clase) [editar]

Constantes

Marcador de posición para saltarse un elemento cuando se desempaca una tupla utilizando tie.
(constante) [editar]

Funciones

Crea un objeto de tupla del tipo definido por los tipos de argumentos.
(plantilla de función) [editar]
Crea una tupla de referencias lvalue o desempaca una tupla en objetos individuales.
(plantilla de función) [editar]
Crea una tupla de referencias r-valor.
(plantilla de función) [editar]
Crea una tupla mediante la concatenación de cualquier número de tuplas.
(plantilla de función) [editar]
La tupla accede al elemento especificado.
(plantilla de función) [editar]
Compara lexicográficamente los valores de la tupla
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
(C++17)
Llama a una función con una tupla de argumentos.
(plantilla de función) [editar]
Construye un objeto con una tupla de argumentos.
(plantilla de función) [editar]

[editar] 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>;
}

[editar] 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...>;
}