Namespaces
Variants

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

From cppreference.net
Standard library headers

Dieser Header ist Teil der allgemeinen Utility-Bibliothek .

Inhaltsverzeichnis

Includes

(C++20)
Unterstützung für den Drei-Wege-Vergleichsoperator

Klassen

(C++11)
implementiert Container fester Größe, der Elemente möglicherweise unterschiedlicher Typen enthält
(Klassentemplate)
(C++11)
ermittelt die Anzahl der Elemente eines Tupel-ähnlichen Typs
(Klassen-Template)
ermittelt die Elementtypen eines Tupel-ähnlichen Typs
(Klassen-Template)
ermittelt die Größe von

einem tuple
(Klassen-Template-Spezialisierung)

ermittelt den Typ des angegebenen Elements
(Klassen-Template-Spezialisierung)
spezialisiert das std::uses_allocator Type-Trait
(Klassen-Template-Spezialisierung)

Konstanten

(C++11)
Platzhalter zum Überspringen eines Elements beim Auspacken eines tuple mittels tie
(Konstante)

Funktionen

(C++11)
erstellt ein tuple -Objekt des durch die Argumenttypen definierten Typs
(Funktions-Template)
(C++11)
erstellt ein tuple von Lvalue-Referenzen oder entpackt ein tuple in einzelne Objekte
(Funktions-Template)
erstellt ein tuple aus Forwarding-Referenzen
(Funktions-Template)
(C++11)
erstellt ein tuple durch Verkettung beliebig vieler Tupel
(Funktions-Template)
Zugriff auf spezifisches Tuple-Element
(Funktions-Template)
(entfernt in C++20) (entfernt in C++20) (entfernt in C++20) (entfernt in C++20) (entfernt in C++20) (C++20)
vergleicht die Werte im Tupel lexikographisch
(Funktions-Template)
spezialisiert den std::swap Algorithmus
(Funktions-Template)
(C++17)
ruft eine Funktion mit einem Tupel von Argumenten auf
(Funktions-Template)
Konstruiert ein Objekt mit einem Tupel von Argumenten
(Funktions-Template)

Übersicht

#include <compare>
namespace std {
  // Klassentemplate tuple
  template<class... Typen>
    class tuple;
  // Tupel-Erstellungsfunktionen
  inline constexpr /* nicht spezifiziert */ 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... Tupel>
    constexpr tuple<CTypes...> tuple_cat(Tuples&&...);
  // Aufruf einer Funktion mit einem Tupel von Argumenten
  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);
  // tuple Hilfsklassen
  template<class T> struct tuple_size;                  // not defined
  template<class T> struct tuple_size<const T>;
  template<class... Typen> struct tuple_size<tuple<Types...>>;
  template<size_t I, class T> struct tuple_element;     // nicht definiert
  template<size_t I, class T> struct tuple_element<I, const T>;
  template<size_t I, class... Typen>
    struct tuple_element<I, tuple<Types...>>;
  template<size_t I, class T>
    using tuple_element_t = typename tuple_element<I, T>::type;
  // Elementzugriff
  template<size_t I, class... Typen>
    constexpr tuple_element_t<I, tuple<Types...>>& get(tuple<Types...>&) noexcept;
  template<size_t I, class... Typen>
    constexpr tuple_element_t<I, tuple<Types...>>&& get(tuple<Types...>&&) noexcept;
  template<size_t I, class... Typen>
    constexpr const tuple_element_t<I, tuple<Types...>>&
      get(const tuple<Types...>&) noexcept;
  template<size_t I, class... Typen>
    constexpr const tuple_element_t<I, tuple<Types...>>&&
      get(const tuple<Types...>&&) noexcept;
  template<class T, class... Typen>
    constexpr T& get(tuple<Types...>& t) noexcept;
  template<class T, class... Typen>
    constexpr T&& get(tuple<Types...>&& t) noexcept;
  template<class T, class... Typen>
    constexpr const T& get(const tuple<Types...>& t) noexcept;
  template<class T, class... Typen>
    constexpr const T&& get(const tuple<Types...>&& t) noexcept;
  // relational operators
  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...>&);
  // allocatorbezogene Traits
  template<class... Typen, class Alloc>
    struct uses_allocator<tuple<Types...>, Alloc>;
  // spezialisierte Algorithmen
  template<class... Typen>
    constexpr void
      swap(tuple<Types...>& x, tuple<Types...>& y) noexcept(/* siehe Beschreibung */);
  // Tuple-Hilfsklassen
  template<class T>
    inline constexpr size_t tuple_size_v = tuple_size<T>::Wert;
}
// veraltet
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>;
}

Klassentemplate std::tuple

namespace std {
  template<class... Types>
  class tuple {
  public:
    // Tupel-Konstruktion
    constexpr explicit(/* siehe Beschreibung */) tuple();
    constexpr explicit(/* siehe Beschreibung */)
      tuple(const Types&...);         // nur wenn sizeof...(Types) >= 1
    template<class... UTypes>
      constexpr explicit(/* siehe Beschreibung */)
        tuple(UTypes&&...);           // nur wenn sizeof...(Types) >= 1
    tuple(const tuple&) = default;
    tuple(tuple&&) = default;
    template<class... UTypes>
      constexpr explicit(/* siehe Beschreibung */) tuple(const tuple<UTypes...>&);
    template<class... UTypes>
      constexpr explicit(/* siehe Beschreibung */) tuple(tuple<UTypes...>&&);
    template<class U1, class U2>
      constexpr explicit(/* siehe Beschreibung */)
        tuple(const pair<U1, U2>&);   // nur wenn sizeof...(Types) == 2
    template<class U1, class U2>
      constexpr explicit(/* siehe Beschreibung */)
        tuple(pair<U1, U2>&&);        // nur wenn sizeof...(Types) == 2
    // Allokator-erweiterte Konstruktoren
    template<class Alloc>
      constexpr explicit(/* siehe Beschreibung */)
        tuple(allocator_arg_t, const Alloc& a);
    template<class Alloc>
      constexpr explicit(/* siehe Beschreibung */)
        tuple(allocator_arg_t, const Alloc& a, const Types&...);
    template<class Alloc, class... UTypes>
      constexpr explicit(/* siehe Beschreibung */)
        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(/* siehe Beschreibung */)
        tuple(allocator_arg_t, const Alloc& a, const tuple<UTypes...>&);
    template<class Alloc, class... UTypes>
      constexpr explicit(/* siehe Beschreibung */)
        tuple(allocator_arg_t, const Alloc& a, tuple<UTypes...>&&);
    template<class Alloc, class U1, class U2>
      constexpr explicit(/* siehe Beschreibung */)
        tuple(allocator_arg_t, const Alloc& a, const pair<U1, U2>&);
    template<class Alloc, class U1, class U2>
      constexpr explicit(/* siehe Beschreibung */)
        tuple(allocator_arg_t, const Alloc& a, pair<U1, U2>&&);
    // Tupelzuweisung
    constexpr tuple& operator=(const tuple&);
    constexpr tuple& operator=(tuple&&) noexcept(/* siehe Beschreibung */);
    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>&); // nur wenn sizeof...(Types) == 2
    template<class U1, class U2>
      constexpr tuple& operator=(pair<U1, U2>&&);      // nur wenn sizeof...(Types) == 2
    // Tupel-Austausch
    constexpr void swap(tuple&) noexcept(/* siehe Beschreibung */);
  };
  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...>;
}