编译器报错:模板参数太多的错误
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;