今天看stlport源码,看见一个宏定义_STLP_NO_CLASS_PARTIAL_SPECIALIZATION,找了半天原来是Template Partial Specialization,模板部分特化的意思,就是含有两个以上的模板参数的模板类,
编译器允许我们先实例化其中的一个参数。
举个例子:
template<class T, class Alloc>
class vector<class T, class Alloc>{
}
template<class T>
class Vector<T, MyAlloc>{
}
当然也可以只部分特化模板类的某个函数:
typedef MyAlloc;
template<class T, class Alloc>
class vector<class T, class Alloc>{
template<class T>
void removeAll<T, MyAlloc>(){
MyAlloc::Deallocate((T*)&(*first));
}
}
当然直接偏特化namespace级别的函数也是不被允许的.
template<class T1, class T2>
void Func(int index){
}
// 不合法的
template<class T>
void Fun<T, int>(int index){
}