std::tuple_cat
| 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 |
(jusqu'à C++23) |
|
Les types |
(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) |
|
(C++11)
|
crée un
tuple
de
références de transfert
(modèle de fonction) |