编译器报错:模板参数太多的错误
1 C++ 不允许同名而参数个数不同的 templates 存在
template<typename ResultType>
class Functor
{
....
};
template < typename ResultType, typename Parm1 >
class Functor
{
....
};
// 编译错误,解决方法:只留一下一个模板定义
2 特例1:模板的偏特化与模板原型声明的模板参数个数不同
// 模板原型
template<typename ResultType>
class Functor
{
};
// 模板的偏特化,增加了参数 Parm1
template < typename ResultType, typename Parm1 >
class Functor <ResultType, int>
{
};
// 编译错误,解决方法:修改模板原型
template<typename ResultType, typename Parm1>
class Functor
{
};
3 特例2:模板完全特化与模板原型声明的模板参数个数不同
template<typename ResultType>
class Functor
{
};
template <>
class Functor <int, int>
{
};
// 解决方法同上
4 一种额外的情况:无模板的原型声明的模板编译错误
// 情况1:
template <typename ResultType>
class Functor < ResultType, int >
{
};
// 情况2:
template <>
class Functor < int, int>
{
};
// 情况1、2 都会产生下面的编译错误
// error C2059: 语法错误:“<”
// error C2143: 语法错误 : 缺少“;”(在“{”的前面)
// error C2143: 语法错误 : 缺少“;”(在“<”的前面)
// error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
// error C2913: 显式专用化;“Functor”不是类模板的专用化
// IntelliSense: Functor 不是模板
// 原因:没有声明模板原型
// 解决方法:
template <typename ResultType, typename Parm1>
class Functor
{
};
// 或者:
template <typename ResultType, typename Parm1> class Functor;