1.1模板的泛化:所有模板参数类型都未定义,等到使用时才知道,通用的模板
template <class type>
struct _type_traits{
...
一些操作
...
};
1.2模板的特化: 给模板中的所有模板参数一个具体的类"的方式来实现的。
template<> struct _type_traits<int>{ //指定int类型后,template <class type>变为template<>
...
一些操作
...
};
2.1模板的泛化:所有模板参数类型都未定义,等到使用时才知道,通用的模板
template<class T,class Alloc=alloc>
class vector{
...
};
模板的偏特化: 给模板中的部分模板参数以具体的类,而留下剩余的模板参数仍然使用原来的泛化定义的方式来实现的。
template<class Alloc> //偏特化后 ,template<class T,class Alloc=alloc>变为template<class Alloc>
class vector<bool,Alloc>{
...
};
当你实例化一个模板时,编译器会把目前存在的偏特化模板和全特化模板做比较,并找出其中最合适、最匹配的实现.
模板的偏特化机制不能用在函数身上,不论成员函数还是非成员函数.