上面對模板的特化進行了總結。那模板的偏特化呢?所謂的偏特化是指提供另一份模板定義式,而其本身仍為模板;也就是說,針對模板參數更進一步的條件限制所設計出來的一個特化版本。這種偏特化的應用在STL中是隨處可見的。比如
1.測試代碼:?
#include <iostream>
using namespace std;namespace templateTest {//模版泛化template<typename T>class iterator_traits{public:iterator_traits() { cout << "模版泛化" << endl; }~iterator_traits() {}};//偏特化template<typename T>class iterator_traits<T*>{public:iterator_traits() { cout << "模版偏特化,特化常規指針" << endl; }~iterator_traits() {};};//偏特化template<typename T>class iterator_traits<const T*>{public:iterator_traits() { cout << "模版偏特化,特化const指針" << endl; }~iterator_traits() {}};//全特化template<>class iterator_traits<int>{public:iterator_traits() { cout << "模版全特化int類型" << endl; }~iterator_traits() {}};
};int main()
{templateTest::iterator_traits<int> t1; // 模版全特化int類型templateTest::iterator_traits<float> t2; // 模版泛化templateTest::iterator_traits<int*> t3; // 模版偏特化,特化常規指針templateTest::iterator_traits<const int*> t4; // 模版偏特化,特化const指針
}
2. 測試代碼:
#include <iostream>
using namespace std;//泛化
template<class U, class T>
class Test
{
public:Test() { cout << "Test 泛化" << endl; }
};//偏特化
template<class T>
class Test<int, T>
{
public:Test() { cout << "Test 偏特化" << endl; }
};//全特化
template<>
class Test<int, char>
{
public:Test() { cout << "Test 全特化" << endl; }
};/*--------------------------------------------------*/template<typename T>
void max(const T& t1, const T& t2)
{cout << "模版函數泛化" << endl;}//其實函數模版不存在偏特化,只有全特化
template<>
void max<int>(const int& t1, const int& t2)
{cout << "模版函數全特化" << endl;
}void main()
{Test<int, int> t1; // Test 偏特化Test<float, int> t2; // Test 泛化Test<int, char> t3; // Test 全特化max(5, 10); // 模版函數特化max(5.5, 10.5); // 模版函數泛化
}
?