std::get(std::tuple)
Aus de.cppreference.net
| Definiert in Header <tuple>
|
||
template< std::size_t I, class... Types >
typename std::tuple_element<I, std::tuple<Types...>>::type&
get( std::tuple<Types...>& t ) noexcept;
|
(1) | (seit C++11) (constexpr seit C++14) |
template< std::size_t I, class... Types >
typename std::tuple_element<I, std::tuple<Types...>>::type&&
get( std::tuple<Types...>&& t ) noexcept;
|
(2) | (seit C++11) (constexpr seit C++14) |
template< std::size_t I, class... Types >
const typename std::tuple_element<I, std::tuple<Types...>>::type&
get( const std::tuple<Types...>& t ) noexcept;
|
(3) | (seit C++11) (constexpr seit C++14) |
template< std::size_t I, class... Types >
const typename std::tuple_element<I, std::tuple<Types...>>::type&&
get( const std::tuple<Types...>&& t ) noexcept;
|
(4) | (seit C++11) (constexpr seit C++14) |
template< class T, class... Types >
constexpr T& get( std::tuple<Types...>& t ) noexcept;
|
(5) | (seit C++14) |
template< class T, class... Types >
constexpr T&& get( std::tuple<Types...>&& t ) noexcept;
|
(6) | (seit C++14) |
template< class T, class... Types >
constexpr const T& get( const std::tuple<Types...>& t ) noexcept;
|
(7) | (seit C++14) |
template< class T, class... Types >
constexpr const T&& get( const std::tuple<Types...>&& t ) noexcept;
|
(8) | (seit C++14) |
1-4) Extrahiert das
I-te Element aus dem Tuple. I muss ein ganzzahliger Wert in [0, sizeof...(Types)) sein.5-8) Extrahiert das Element des Tuples
t, dessen Typ T ist. Die Kompilierung schlägt fehl, es sei denn, das Tuple hat genau ein Element dieses Typs.Parameter
| t | - | Tupel, dessen Inhalt extrahiert werden soll |
Rückgabewert
Ein Verweis auf das ausgewählte Element von t .
Hinweise
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_tuples_by_type
|
201304L
|
(C++14) | Adressierung von Tupeln nach Typ ( 5-8 ) |
Beispiel
Diesen Code ausführen
#include <cassert> #include <iostream> #include <string> #include <tuple> int main() { auto x = std::make_tuple(1, "Foo", 3.14); // Indexbasierter Zugriff std::cout << "( " << std::get<0>(x) << ", " << std::get<1>(x) << ", " << std::get<2>(x) << " )\n"; // Typbasierter Zugriff (seit C++14) std::cout << "( " << std::get<int>(x) << ", " << std::get<const char*>(x) << ", " << std::get<double>(x) << " )\n"; const std::tuple<int, const int, double, double> y(1, 2, 6.9, 9.6); const int& i1 = std::get<int>(y); // OK: nicht mehrdeutig assert(i1 == 1); const int& i2 = std::get<const int>(y); // OK: nicht mehrdeutig assert(i2 == 2); // const double& d = std::get<double>(y); // Fehler: ungültig (mehrdeutig) // Hinweis: std::tie und strukturierte Bindungen können // verwendet werden, um ein Tupel in einzelne Objekte zu entpacken. }
Ausgabe:
( 1, Foo, 3.14 ) ( 1, Foo, 3.14 )
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2485 |
C++11 (nach Index)
C++14 (nach Typ) |
es gibt keine Überladungen für const tuple && | diese Überladungen hinzugefügt ( ( 4 ) und ( 8 ) ) |
Siehe auch
|
(C++11)
|
greift auf ein Element eines
array
zu
(Funktions-Template) |
|
(C++11)
|
greift auf ein Element eines
pair
zu
(Funktions-Template) |
|
(C++17)
|
liest den Wert des Varianten gegeben den Index oder den Typ (falls der Typ eindeutig ist), wirft bei Fehler
(Funktions-Template) |
|
(C++20)
|
erhält Iterator oder Sentinel aus einem
std::ranges::subrange
(Funktions-Template) |
|
(C++26)
|
erhält eine Referenz auf Real- oder Imaginärteil aus einem
std::complex
(Funktions-Template) |
|
(C++11)
|
erstellt ein
tuple
von Lvalue-Referenzen oder entpackt ein Tupel in einzelne Objekte
(Funktions-Template) |
| Structured binding (C++17) | bindet die angegebenen Namen an Teilobjekte oder Tupel-Elemente des Initialisierers |