std:: get (std::tuple)
|
Definiert im Header
<tuple>
|
||
|
template
<
std::
size_t
I,
class
...
Types
>
typename
std::
tuple_element
<
I,
std::
tuple
<
Types...
>>
::
type
&
|
(1) |
(seit C++11)
(constexpr seit C++14) |
|
template
<
std::
size_t
I,
class
...
Types
>
typename
std::
tuple_element
<
I,
std::
tuple
<
Types...
>>
::
type
&&
|
(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
&
|
(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
&&
|
(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) |
[
0
,
sizeof...
(
Types
)
)
sein.
T
ist. Schlägt zur Kompilierzeit fehl, es sei denn, das Tupel hat genau ein Element dieses Typs.
Inhaltsverzeichnis |
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
#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 |