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 ?

Comment récupérer les types d’arguments d’un pointeur de fonction dans une classe de modèle variadique ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-31 08:19:30839parcourir

 How to Retrieve Argument Types of a Function Pointer in a Variadic Template Class?

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 :

  • Extraire le nombre d'arguments :La constante nargs représente le nombre d'arguments pris par la fonction.
  • Établir le Type de retour : Le typedef result_type identifie le type de retour.
  • Détermination des types d'arguments individuels : La structure du modèle arg fournit les types spécifiques de chaque argument.

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!

Déclaration:
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