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);
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);
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; }
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!