2 votes

Signature de fonction en tant que paramètre d'un modèle de fonction

J'aimerais utiliser la signature d'une fonction comme argument d'un modèle. Cela fonctionne très bien pour les classes, mais lorsque j'essaie la même chose pour les modèles de fonctions, msvc lance une erreur :

erreur C2768 : 'Func' : utilisation illégale d'arguments de modèle explicites

Voici mon code :

template <typename Signature>
void Func();

template <typename R, typename A1>
void Func<R(A1)>();

Que dois-je faire pour que cela fonctionne ?

4voto

Andy Prowl Points 62121

Vous ne pouvez pas spécialiser partiellement un modèle de fonction qui n'est pas pris en charge par la langue. Ce que vous pouvez faire, c'est créer un modèle de fonction partiellement spécialisé. classe avec une fonction membre statique, et éventuellement une fonction trampoline qui instanciera ce modèle de classe et invoquera la fonction statique.

Voici ce qu'il en est :

namespace detail
{
    template<typename Signature>
    struct helper;

    template<typename R, typename A1>
    struct helper<R(A1)>
    {
        static void call()
        {
            // Do stuff with R and A1...
        }
    };
}

template<typename Signature>
void Func()
{
    detail::helper<Signature>::call();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X