2

我想使用函数签名作为模板参数。它适用于类,但是当我对函数模板尝试相同的技巧时,msvc 会引发错误:

错误 C2768:“Func”:非法使用显式模板参数

这是我的代码:

template <typename Signature>
void Func();

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

我应该怎么做才能让它工作?

4

1 回答 1

4

您不能部分专门化该语言不支持的函数模板。您可以做的是创建一个带有静态成员函数的部分专用模板,可能还有一个蹦床函数,该函数将实例化该类模板并调用静态函数。

像这样的东西:

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();
}
于 2013-05-04T10:17:53.327 回答