函数签名作为函数模板参数

时间:2013-05-04 10:14:50

标签: c++ templates visual-c++ specialization

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

  

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

这是我的代码:

template <typename Signature>
void Func();

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

我该怎么做才能让它发挥作用?

1 个答案:

答案 0 :(得分:4)

您无法部分专门化该语言不支持的功能模板。你可以做的是使用静态成员函数创建一个部分专用的模板,并且可能是一个trampoline函数,它将实例化该类模板并调用静态函数。

这样的事情:

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();
}