Maison > développement back-end > C++ > Comment puis-je transmettre un tuple de valeurs comme arguments à une fonction de modèle variadique en C ?

Comment puis-je transmettre un tuple de valeurs comme arguments à une fonction de modèle variadique en C ?

Patricia Arquette
Libérer: 2025-01-02 22:07:40
original
542 Les gens l'ont consulté

How Can I Pass a Tuple of Values as Arguments to a Variadic Template Function in C  ?

Extension d'arguments de fonction de modèle variadique à partir de tuples

Considérez une fonction basée sur un modèle avec des paramètres de modèle variadiques :

template<typename Tret, typename... T> Tret func(const T&... t);
Copier après la connexion

Comment pouvez-vous appeler func() en utilisant un tuple de valeurs comme arguments ?

Solution C moderne (C 17 et versions ultérieures)

En C 17, la fonction std::apply() fournit une solution élégante :

std::apply(the_function, the_tuple);
Copier après la connexion

Solution de contournement Clang 3.9

Si vous utilisez Clang 3.9, vous pouvez utiliser la fonction std::experimental::apply à la place.

Gestion des fonctions basées sur un modèle

Si la fonction est basée sur un modèle, vous pouvez utiliser la solution de contournement suivante :

#include <tuple>

template <typename T, typename U> void my_func(T &&t, U &&u) {}

int main() {

  std::tuple<int, float&> my_tuple;

  std::apply([](auto &&... args) { my_func(args...); }, my_tuple);

  return 0;
}
Copier après la connexion

Ensemble de surcharge généralisée Invocation

Pour une solution plus polyvalente capable de gérer les ensembles de surcharge et les modèles de fonctions, reportez-vous à l'explication complète sur https://blog.tartanllama.xyz/passing-overload-sets/.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal