Namespaces
Variants

std::get(std::tuple)

Depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support du langage
Support de types (types de base, RTTI)
Macros de test de fonctionnalités de la bibliothèque (C++20)
Utilitaires de programme
Fonctions variadiques
Support des coroutines (C++20)
Support des contrats (C++26)
Comparaison ternaire
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (déprécié en C++20)
 
 
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 [0sizeof...(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

#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

accède à un élément d'un array
(modèle de fonction)
accède à un élément d'une pair
(modèle de fonction)
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)
obtient un itérateur ou un sentinelle d'un std::ranges::subrange
(modèle de fonction)
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