Tuple modèle : appel de fonctions sur chaque élément
Au sein d'un tuple modèle comprenant des vecteurs de types différents, il est souvent nécessaire d'effectuer une tâche spécifique opération sur chaque élément vectoriel.
Question :
Comment une fonction peut-elle être invoquée sur chaque élément d'un tuple modèle, permettant l'exécution de tâches telles que "pour chaque (N) : do_something_to_vec
Réponse :
L'emploi d'une combinaison de techniques de méta-programmation C et de modèles de fonctions offre une solution élégante.
Modèles de fonctions : Utilisez ces modèles de fonctions :
Dans le contexte du modèle TupleOfVectors fourni, une méthode do_something_to_each_vec peut être implémenté comme suit :
<code class="cpp">template<typename... Ts> struct TupleOfVectors { std::tuple<std::vector<Ts>...> t; void do_something_to_each_vec() { for_each_in_tuple(t, tuple_vector_functor()); } struct tuple_vector_functor { template<typename T> void operator () (T const &v) { // Perform desired operations on the argument vector... } }; };</code>
Si C 14 ou version ultérieure est disponible, la fonction for_each_in_tuple peut être mis à jour pour utiliser std::integer_sequence.
En C 17 ou version ultérieure, une syntaxe concise existe :
<code class="cpp">std::apply([](auto ...x){std::make_tuple(some_function(x)...);} , the_tuple);</code>
Ces solutions fournissent une méthode flexible et efficace pour effectuer des opérations sur chaque élément dans un tuple de modèle, sans avoir besoin de boucles ou d'index explicites.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!