"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je accéder aux types d'arguments d'un pointeur de fonction dans une classe de modèle variadique ?

Comment puis-je accéder aux types d'arguments d'un pointeur de fonction dans une classe de modèle variadique ?

Publié le 2024-11-21
Parcourir:870

How can I access the argument types of a function pointer within a variadic template class?

Accès aux types d'arguments de pointeur de fonction dans la classe de modèle variadique

Ce problème découle d'une requête précédente concernant la création d'un foncteur générique pour les fonctions avec un argument arbitraire listes. La classe de foncteurs donnée, Foo, permet d'invoquer un pointeur de fonction avec n'importe quel nombre d'arguments. Cependant, la tâche consiste maintenant à extraire les types d'arguments du pointeur de fonction dans le constructeur Foo.

Lors de la définition de la classe Foo, les types d'arguments sont encapsulés sous la forme ARGS... dans la déclaration du pointeur de fonction du constructeur. Bien que les valeurs des arguments ne soient pas disponibles au moment de la construction, leurs types sont accessibles dans le pointeur de fonction lui-même.

Pour découvrir ces types d'arguments, on peut exploiter la classe function_traits :

template 
struct function_traits;  

template>
{
    // Number of arguments
    static const size_t nargs = sizeof...(Args);

    // Return type
    typedef R result_type;

    // Argument types at specified index
    template <size_t i>
    struct arg
    {
        typedef typename std::tuple_element<i, std::tuple<Args...>>::type type;
    };
};

Dans le constructeur Foo, on peut accéder à ces types d'arguments en utilisant function_traits comme suit :

template

En utilisant function_traits, les types d'arguments peuvent être extraits et exploités au sein de la classe Foo, permettant des opérations sophistiquées basées sur la signature de la fonction.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3