泛化
template <typename T>
class Person {
T a;
}
在实际使用中,T可以被替换为int、double、string等,大大提高了代码的复用性。
Person<int> p1;
Person<char> p2;
Person<bool> p3;
全特化
已经有了泛化的类实现,但是还会出现一些特殊情况。于是就产生了全特化。
template<typename T>
class Person {} // 当使用Person<int> p1;等,都是使用这个类实现
template<> // 说明使用的是特化
class Person<bool> {} // 当使用Person<bool> p2; 调用这个类实现
部分特化
部分特化又分为针对指针类型的特殊实现和类型范围的特殊处理两种。
针对指针类型
template<typename T>
class Person {}
template<typename T>
class Person<T*> {} // 当使用int* a; Person<a> p1;时,调用这个实现
针对范围类型
template<typename T1, typename T2>
class Person {}
template<typename T2>
class Person<bool, T2> {} // 当使用Person<bool, int> p1;时,都调用这个实现