template分类: class template,function template
template在编译时会检查两次,1检查模板本身是否符合语法,2编译期间,检查使用时代入具体类型后,生成的具体类或函数是否符合语法。
对于class template 来说必须显示指定typename
对于function template 可以根据参数进行推导(对于有多个参数的function,经行推导返回类型时,参数的类型必须一样,不然无法推导),不支持自动类型转换。
当有参数列表符合模板及普通函数时,优先调用普通函数,当没有匹配是,考虑普通函数的参数转换版本
对于template<class T>与template<typename T>建议使用typename
class template:
定义:与function template 类同
对于使用stack<stack<int> >时,应空一格,免得与operator>>混淆
特化:要对某些类型可以进行优化,不同实现,则可以对类模板进行特化
template<>
class A<int>{ }
为int特化
偏特化:
原申明: template<typename T1,typename T2> class A{....}
偏特化: template<typename T>class A<int,T>{......}
template <typename T> class A<T,float>{......}
偏特化是要注意不要造成调用时的二义性
泛型编程
traits(特性):
当返回类型溢出和参数类型相同时,可能溢出,为解决这种情况为每一种参数类型关联一种返回类型,方
网友评论