CPP Templates 之 局部类模板特化
/*局部的类模板特化
*对于局部特化声明的参数列表和实参列表,存在一些约束。下面就是一些重要的约束:
*1.局部特化的实参必须喝基本模板的相应参数在种类上(可以使类型,非类型或者模板)是匹配的
*2.局部特化的参数列表不能具有缺省实参;但局部特化仍然可以使用基本类模板的缺省实参
*3.局部特化的非类型实参只能是非类型值,或者是普通的非类型参数;而不能是更复杂的依赖型表达式
*4.局部特化的模板实参不能和基本模板的实参列表完全相同(不考虑重新命名)
*下面详细说明这些约束:
*/
template<typename T,int I = 3>
class S;
template<typename T>
class S<int,T>;//ERROR ,参数类型不匹配
template<typename T=int>
class S<T,10>;//error,不能具有缺省参数
template<int I>
class S<int,I*2>;//ERROR,不能有更复杂的依赖型表达式
template<typename U,int K>
class S<U,K>;//ERROR,局部特化和基本模板之间没有任何的区别
*对于局部特化声明的参数列表和实参列表,存在一些约束。下面就是一些重要的约束:
*1.局部特化的实参必须喝基本模板的相应参数在种类上(可以使类型,非类型或者模板)是匹配的
*2.局部特化的参数列表不能具有缺省实参;但局部特化仍然可以使用基本类模板的缺省实参
*3.局部特化的非类型实参只能是非类型值,或者是普通的非类型参数;而不能是更复杂的依赖型表达式
*4.局部特化的模板实参不能和基本模板的实参列表完全相同(不考虑重新命名)
*下面详细说明这些约束:
*/
template<typename T,int I = 3>
class S;
template<typename T>
class S<int,T>;//ERROR ,参数类型不匹配
template<typename T=int>
class S<T,10>;//error,不能具有缺省参数
template<int I>
class S<int,I*2>;//ERROR,不能有更复杂的依赖型表达式
template<typename U,int K>
class S<U,K>;//ERROR,局部特化和基本模板之间没有任何的区别