Maison > Article > développement back-end > Comment récupérer les types d’arguments d’un pointeur de fonction dans une classe de modèle variadique ?
Récupération des types d'arguments d'un pointeur de fonction dans une classe de modèle variadique
Dans le numéro précédent, une classe de foncteurs générique a été créée pour gérer les fonctions avec des listes d'arguments arbitraires. Le problème en question consiste à accéder aux types d'arguments du pointeur de fonction dans le constructeur de cette classe.
Pour résoudre ce problème, vous pouvez utiliser le modèle de classe function_traits :
<code class="cpp">template<typename T> struct function_traits; template<typename R, typename ...Args> struct function_traits<std::function<R(Args...)>> { static const size_t nargs = sizeof...(Args); typedef R result_type; template <size_t i> struct arg { typedef typename std::tuple_element<i, std::tuple<Args...>>::type type; }; };</code>
Cette classe fournit la fonctionnalité suivante :
Par exemple :
<code class="cpp">struct R{}; struct A{}; struct B{}; typedef std::function<R(A,B)> fun; std::cout << std::is_same<R, function_traits<fun>::result_type>::value << std::endl; std::cout << std::is_same<A, function_traits<fun>::arg<0>::type>::value << std::endl; std::cout << std::is_same<B, function_traits<fun>::arg<1>::type>::value << std::endl;</code>
Sortie :
1 1 1
Cet exemple montre comment utiliser function_traits pour récupérer les types d'arguments dans le constructeur d'une classe de modèle variadique.
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!