C++ 函数签名作为函数模板参数
我想使用函数签名作为模板参数。它对类非常有效,但当我对函数模板尝试相同的技巧时,msvc抛出了一个错误: 错误C2768:“Func”:非法使用显式模板参数 这是我的密码:C++ 函数签名作为函数模板参数,c++,templates,visual-c++,specialization,C++,Templates,Visual C++,Specialization,我想使用函数签名作为模板参数。它对类非常有效,但当我对函数模板尝试相同的技巧时,msvc抛出了一个错误: 错误C2768:“Func”:非法使用显式模板参数 这是我的密码: template <typename Signature> void Func(); template <typename R, typename A1> void Func<R(A1)>(); 模板 void Func(); 模板 void Func(); 我应该怎么做才能使它工作
template <typename Signature>
void Func();
template <typename R, typename A1>
void Func<R(A1)>();
模板
void Func();
模板
void Func();
我应该怎么做才能使它工作?您不能部分地专门化该语言不支持的函数模板。您可以做的是创建一个部分专用的类模板,其中包含一个静态成员函数,以及一个可能的蹦床函数,该函数将实例化该类模板并调用静态函数 大概是这样的:
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();
}
名称空间详细信息
{
模板
结构助手;
模板
结构辅助程序
{
静态void调用()
{
//用R和A1做一些事情。。。
}
};
}
模板
void Func()
{
detail::helper::call();
}
不能部分专门化该语言不支持的函数模板。您可以做的是创建一个部分专用的类模板,其中包含一个静态成员函数,以及一个可能的蹦床函数,该函数将实例化该类模板并调用静态函数
大概是这样的:
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();
}
名称空间详细信息
{
模板
结构助手;
模板
结构辅助程序
{
静态void调用()
{
//用R和A1做一些事情。。。
}
};
}
模板
void Func()
{
detail::helper::call();
}