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 retourné sont formés en concaténant les packs 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 n'est pas dé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 les types (tels que std::array et std::pair ) qui suivent le protocole tuple-like. |
(jusqu'à C++23) |
|
Les types
std::
decay_t
<
Tuples
>
...
sont contraints à être tuple-like, 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
|
(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és à partir de args , le comportement est indéfini (jusqu'à C++23) le programme est mal formé (depuis C++23) .
Table des matières |
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) |