Maison > développement back-end > C++ > Comment récupérer des types d'arguments de fonction dans une classe de modèle variadique ?

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

Mary-Kate Olsen
Libérer: 2024-11-01 10:17:30
original
539 Les gens l'ont consulté

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

Récupération des types d'arguments de fonction dans une classe de modèle variadique

La classe de foncteurs spécifiée, Foo, fournit un moyen d'invoquer des fonctions avec des listes d'arguments arbitraires . Cependant, déterminer les types d'arguments au sein du constructeur présente un défi.

Pour surmonter ce problème, vous pouvez utiliser la classe function_traits comme suit :

<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

Dans la classe Foo, vous pouvez utiliser function_traits pour obtenir les informations sur le type d'argument :

<code class="cpp">class Foo
{
    std::function<void(ARGS...)> m_f;
public:
    using result_type = typename function_traits<decltype(m_f)>::result_type;
    using arg0_type = typename function_traits<decltype(m_f)>::arg<0>::type;
    // ... Additional argument types as needed
};</code>
Copier après la connexion

Cette approche vous permet d'exploiter le système de types pour accéder et manipuler les types d'arguments de fonction de manière générique et sécurisée.

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