1. 定义函数模板特例化:
#include <iostream>
#include <string.h>
using namespace std;
template <typename T>
T Max(T t1, T t2)
{
return (t1 > t2) ? t1 : t2;
}
template <>
const char *Max(const char *s1, const char *s2)
{
return (strcmp(s1, s2) > 0) ? s1 : s2;
}
int main()
{
// 隐式调用实例:int Max<int>(int,int)
int i = Max(10, 5);
// 显式调用特化版本:const char* Max<const char*>(const char*,const char*)
const char *p = Max<const char *>("very", "good");
cout << "i:" << i << endl;
cout << "p:" << p << endl;
}
2. 定义类模板特例化
#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指针
}