特化是泛化的反面,针对特定的具体的设计的一种方法:
//泛化
template <class Key>
struct hash{};
//特化
template<>
struct hash<char>
{
size_t operator()(char x)const {return x;}
}
template<>
struct hash<int>
{
size_t operator()(char x)const {return x;}
}
template<>
struct hash<long>
{
size_t operator()(char x)const {return x;}
}
//使用
cout<<hash<long>()(1000);
//hash<long>() 生成临时对象
模板偏特化 --个数偏
template<typename T,typename Alloc=...>
class vector
{
......
}
//根据需要,如果只是需要一个boolean 值,可以使用T 绑定bool类型
template<typename,Alloc=...>
class vector<bool,Alloc>
{
.....
}
模板偏特化---范围偏
//泛化
template <typename T>
class C
{
....
};
//特化
tempalte <typename T>
class C<T*>
{
...
};
//C++支持比如你要用一种类型T指向一种东西,可以特化使用这种类型的指针,至于指向什么东西,都可以