std::get(std::tuple)
Depuis fr.cppreference.net
| Défini dans l'en-tête <tuple>
|
||
template< std::size_t I, class... Types >
typename std::tuple_element<I, std::tuple<Types...>>::type&
get( std::tuple<Types...>& t ) noexcept;
|
(1) | (depuis C++11) (constexpr depuis 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) | (depuis C++11) (constexpr depuis 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) | (depuis C++11) (constexpr depuis 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) | (depuis C++11) (constexpr depuis C++14) |
template< class T, class... Types >
constexpr T& get( std::tuple<Types...>& t ) noexcept;
|
(5) | (depuis C++14) |
template< class T, class... Types >
constexpr T&& get( std::tuple<Types...>&& t ) noexcept;
|
(6) | (depuis C++14) |
template< class T, class... Types >
constexpr const T& get( const std::tuple<Types...>& t ) noexcept;
|
(7) | (depuis C++14) |
template< class T, class... Types >
constexpr const T&& get( const std::tuple<Types...>&& t ) noexcept;
|
(8) | (depuis C++14) |
1-4) Extrait le
Iième élément du tuple. I doit être une valeur entière dans [0, sizeof...(Types)).5-8) Extrait l'élément du tuple
t dont le type est T. Échoue à la compilation sauf si le tuple a exactement un élément de ce type.Paramètres
| t | - | tuple dont il faut extraire le contenu |
Valeur de retour
Une référence à l'élément sélectionné de t .
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_tuples_by_type
|
201304L
|
(C++14) | Accès aux tuples par type ( 5-8 ) |
Exemple
Exécuter ce code
#include <cassert> #include <iostream> #include <string> #include <tuple> int main() { auto x = std::make_tuple(1, "Foo", 3.14); // Accès par index std::cout << "( " << std::get<0>(x) << ", " << std::get<1>(x) << ", " << std::get<2>(x) << " )\n"; // Accès par type (depuis 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 : non ambigu assert(i1 == 1); const int& i2 = std::get<const int>(y); // OK : non ambigu assert(i2 == 2); // const double& d = std::get<double>(y); // Erreur : mal formé (ambigu) // Note : std::tie et la décomposition structurelle peuvent être // utilisés pour déballer un tuple en objets individuels. }
Sortie :
( 1, Foo, 3.14 ) ( 1, Foo, 3.14 )
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 2485 |
C++11 (par index)
C++14 (par type) |
il n'y a pas de surcharges pour const tuple && | ces surcharges ont été ajoutées ( ( 4 ) et ( 8 ) ) |
Voir aussi
|
(C++11)
|
accède à un élément d'un
array
(modèle de fonction) |
|
(C++11)
|
accède à un élément d'une
pair
(modèle de fonction) |
|
(C++17)
|
lit la valeur du variant donné l'index ou le type (si le type est unique), lance une exception en cas d'erreur
(modèle de fonction) |
|
(C++20)
|
obtient un itérateur ou un sentinelle d'un
std::ranges::subrange
(modèle de fonction) |
|
(C++26)
|
obtient une référence à la partie réelle ou imaginaire d'un
std::complex
(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) |
| Structured binding (C++17) | lie les noms spécifiés aux sous-objets ou éléments de tuple de l'initialiseur |