Namespaces
Variants

std::tuple_cat

Depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support linguistique
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 à trois voies
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (obsolète en C++20)
 
 
Défini dans l'en-tête <tuple>
template< class... Tuples >
std::tuple</* CTypes */...> tuple_cat( Tuples&&... args );
(depuis C++11)
(jusqu'à C++14)
template< class... Tuples >
constexpr std::tuple</* CTypes */...> tuple_cat( Tuples&&... args );
(depuis C++14)
(jusqu'à C++23)
template< tuple-like... Tuples >
constexpr std::tuple</* CTypes */...> tuple_cat( Tuples&&... args );
(depuis C++23)

Construit un tuple qui est une concaténation de tous les tuples dans args. Les types d'éléments /* CTypes */ du tuple renvoyé sont formés en concaténant les paquets de types d'éléments de tous les types std::tuple(jusqu'à C++23)tuple-like(depuis C++23) dans Tuples dans l'ordre.

Le comportement est indéfini si un type dans std::decay_t<Tuples>... n'est pas une spécialisation de std::tuple. Cependant, une implémentation peut choisir de supporter des types (tels que std::array et std::pair) qui suivent le protocole de type tuple.

(jusqu'à C++23)

Les types std::decay_t<Tuples>... sont contraints d'être de type tuple, c'est-à-dire que chaque type doit être une spécialisation de std::tuple ou un autre type (tel que std::array et std::pair) qui modélise tuple-like.

(depuis C++23)

Si un type dans /* CTypes */ n'est pas constructible à partir du type de l'élément correspondant dans la séquence d'éléments concaténée depuis args, le comportement est indéfini(jusqu'à C++23)le programme est mal formé(depuis C++23).

Paramètres

args - zéro ou plusieurs tuples à concaténer

Valeur de retour

Un objet std::tuple composé de tous les éléments de tous les tuples d'arguments construit à partir de std :: get < j > ( std:: forward < Ti > ( arg ) ) pour chaque élément individuel.

Exemple

#include <iostream>
#include <string>
#include <tuple>
// fonction d'aide pour afficher un tuple de n'importe quelle taille
template<class Tuple, std::size_t N>
struct TuplePrinter
{
    static void print(const Tuple& t)
    {
        TuplePrinter<Tuple, N - 1>::print(t);
        std::cout << ", " << std::get<N-1>(t);
    }
};
template<class Tuple>
struct TuplePrinter<Tuple, 1>
{
    static void print(const Tuple& t)
    {
        std::cout << std::get<0>(t);
    }
};
template<typename... Args, std::enable_if_t<sizeof...(Args) == 0, int> = 0>
void print(const std::tuple<Args...>& t)
{
    std::cout << "()\n";
}
template<typename... Args, std::enable_if_t<sizeof...(Args) != 0, int> = 0>
void print(const std::tuple<Args...>& t)
{
    std::cout << "(";
    TuplePrinter<decltype(t), sizeof...(Args)>::print(t);
    std::cout << ")\n";
}
// fin de la fonction d'aide
int main()
{
    std::tuple<int, std::string, float> t1(10, "Test", 3.14);
    int n = 7;
    auto t2 = std::tuple_cat(t1, std::make_tuple("Foo", "bar"), t1, std::tie(n));
    n = 42;
    print(t2);
}

Sortie :

(10, Test, 3.14, Foo, bar, 10, Test, 3.14, 42)

Voir aussi

(C++11)
crée un objet tuple du type défini par les types d'arguments
(modèle de fonction)
(C++11)
crée un tuple de références lvalue ou décompose un tuple en objets individuels
(modèle de fonction)
crée un tuple de références de transfert
(modèle de fonction)