Namespaces
Variants

std:: get (std::tuple)

From cppreference.net
Utilities library
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 I ème élément du tuple. I doit être une valeur entière dans l'intervalle [ 0 , sizeof... ( Types ) ) .
5-8) Extrait l'élément du tuple t dont le type est T . Échoue à la compilation sauf si le tuple contient exactement un élément de ce type.

Table des matières

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