Namespaces
Variants

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

From cppreference.net
Standard library headers

Cet en-tête fait partie de la bibliothèque d'utilitaires généraux .

Table des matières

Inclusions

(C++20)
Support de l'opérateur de comparaison à trois voies

Classes

(C++11)
implémente un conteneur de taille fixe, qui contient des éléments de types potentiellement différents
(modèle de classe)
(C++11)
obtient le nombre d'éléments d'un type de type tuple
(modèle de classe)
obtient les types des éléments d'un type de type tuple
(modèle de classe)
obtient la taille de

un tuple
(spécialisation de modèle de classe)

obtient le type de l'élément spécifié
(spécialisation de modèle de classe)
spécialise le std::uses_allocator trait de type
(spécialisation de modèle de classe)

Constantes

(C++11)
espace réservé pour ignorer un élément lors du déballage d'un tuple en utilisant tie
(constante)

Fonctions

(C++11)
crée un objet tuple du type défini par les types d'arguments
(modèle de fonction)
(C++11)
crée un tuple de références de lvalue ou décompose un tuple en objets individuels
(modèle de fonction)
crée un tuple de références de transfert
(modèle de fonction)
(C++11)
crée un tuple en concaténant un nombre quelconque de tuples
(modèle de fonction)
accède à l'élément spécifié du tuple
(modèle de fonction)
(supprimé en C++20) (supprimé en C++20) (supprimé en C++20) (supprimé en C++20) (supprimé en C++20) (C++20)
compare lexicographiquement les valeurs dans le tuple
(modèle de fonction)
spécialise l'algorithme std::swap
(modèle de fonction)
(C++17)
appelle une fonction avec un tuple d'arguments
(modèle de fonction)
construit un objet avec un tuple d'arguments
(modèle de fonction)

Synopsis

#include <compare>
namespace std {
  // modèle de classe tuple
  template<class... Types>
    class tuple;
  // fonctions de création de tuple
  inline constexpr /* non spécifié */ 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&&...);
  // appel d'une fonction avec un tuple d'arguments
  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);
  // classes d'assistance tuple
  template<class T> struct tuple_size;                  // non défini
  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;     // non défini
  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;
  // accès aux éléments
  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;
  // opérateurs relationnels
  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...>&);
  // traits liés à l'allocateur
  template<class... Types, class Alloc>
    struct uses_allocator<tuple<Types...>, Alloc>;
  // algorithmes spécialisés
  template<class... Types>
    constexpr void
      swap(tuple<Types...>& x, tuple<Types...>& y) noexcept(/* voir description */);
  // classes d'assistance tuple
  template<class T>
    inline constexpr size_t tuple_size_v = tuple_size<T>::value;
}
// obsolète
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>;
}

Modèle de classe std::tuple

namespace std {
  template<class... Types>
  class tuple {
  public:
    // construction de tuple
    constexpr explicit(/* voir description */) tuple();
    constexpr explicit(/* voir description */)
      tuple(const Types&...);         // seulement si sizeof...(Types) >= 1
    template<class... UTypes>
      constexpr explicit(/* voir description */)
        tuple(UTypes&&...);           // seulement si sizeof...(Types) >= 1
    tuple(const tuple&) = default;
    tuple(tuple&&) = default;
    template<class... UTypes>
      constexpr explicit(/* voir description */) tuple(const tuple<UTypes...>&);
    template<class... UTypes>
      constexpr explicit(/* voir description */) tuple(tuple<UTypes...>&&);
    template<class U1, class U2>
      constexpr explicit(/* voir description */)
        tuple(const pair<U1, U2>&);   // seulement si sizeof...(Types) == 2
    template<class U1, class U2>
      constexpr explicit(/* voir description */)
        tuple(pair<U1, U2>&&);        // seulement si sizeof...(Types) == 2
    // constructeurs étendus avec allocateur
    template<class Alloc>
      constexpr explicit(/* voir description */)
        tuple(allocator_arg_t, const Alloc& a);
    template<class Alloc>
      constexpr explicit(/* voir description */)
        tuple(allocator_arg_t, const Alloc& a, const Types&...);
    template<class Alloc, class... UTypes>
      constexpr explicit(/* voir description */)
        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(/* voir description */)
        tuple(allocator_arg_t, const Alloc& a, const tuple<UTypes...>&);
    template<class Alloc, class... UTypes>
      constexpr explicit(/* voir description */)
        tuple(allocator_arg_t, const Alloc& a, tuple<UTypes...>&&);
    template<class Alloc, class U1, class U2>
      constexpr explicit(/* voir description */)
        tuple(allocator_arg_t, const Alloc& a, const pair<U1, U2>&);
    template<class Alloc, class U1, class U2>
      constexpr explicit(/* voir description */)
        tuple(allocator_arg_t, const Alloc& a, pair<U1, U2>&&);
    // assignation de tuple
    constexpr tuple& operator=(const tuple&);
    constexpr tuple& operator=(tuple&&) noexcept(/* voir description */);
    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>&); // uniquement si sizeof...(Types) == 2
    template<class U1, class U2>
      constexpr tuple& operator=(pair<U1, U2>&&);      // uniquement si sizeof...(Types) == 2
    // échange de tuple
    constexpr void swap(tuple&) noexcept(/* voir description */);
  };
  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...>;
}