我想使用函数签名作为模板参数。它适用于类,但是当我为函数模板尝试相同的技巧时,msvc会抛出错误:
错误C2768:'Func':非法使用显式模板参数
这是我的代码:
template <typename Signature>
void Func();
template <typename R, typename A1>
void Func<R(A1)>();
我该怎么做才能让它发挥作用?
答案 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();
}