我有一些带有模板函数的辅助模板。我将其用于其他基于策略的模板类中,以将某些值转换或不转换为特定类型:
// use this when needed additional value cast
template <typename T>
struct AdditionalValueStaticCaster
{
template <typename U>
static T cast(U u)
{
return static_cast<T>(u);
}
};
// use this specialization when no needed to cast value
template <>
struct AdditionalValueStaticCaster<void>
{
template <typename U>
static U cast(U u)
{
return u;
}
};
现在我想将这些类分为声明和实现(.h和.hh文件)。
因此,我编写以下声明:
template <typename T>
struct AdditionalValueStaticCaster
{
template <typename U>
static T cast(U u);
};
template <>
struct AdditionalValueStaticCaster<void>
{
template <typename U>
static U cast(U u);
};
现在我想写实现代码。以下方式可以:
template <typename T>
template <typename U>
T AdditionalValueStaticCaster<T>::cast(U u)
{
return static_cast<T>(u);
}
但是这会导致错误 error: too many template-parameter-lists
template<>
template <typename U>
U AdditionalValueStaticCaster<void>::cast(U u)
{
return u;
}
如果我删除
template<>
行,一切都会编译成功,但我仍有一个问题:这是正确的解决方案还是我错过了什么?