我想使用函数签名作为模板参数。它适用于类,但是当我对函数模板尝试相同的技巧时,msvc 会引发错误:
错误 C2768:“Func”:非法使用显式模板参数
这是我的代码:
template <typename Signature>
void Func();
template <typename R, typename A1>
void Func<R(A1)>();
我应该怎么做才能让它工作?
我想使用函数签名作为模板参数。它适用于类,但是当我对函数模板尝试相同的技巧时,msvc 会引发错误:
错误 C2768:“Func”:非法使用显式模板参数
这是我的代码:
template <typename Signature>
void Func();
template <typename R, typename A1>
void Func<R(A1)>();
我应该怎么做才能让它工作?
您不能部分专门化该语言不支持的函数模板。您可以做的是创建一个带有静态成员函数的部分专用类模板,可能还有一个蹦床函数,该函数将实例化该类模板并调用静态函数。
像这样的东西:
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();
}