Maison > développement back-end > C++ > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-10-31 08:19:30
original
838 Les gens l'ont consulté

 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>
Copier après la connexion

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>
Copier après la connexion

Sortie :

1
1
1
Copier après la connexion

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!