例:
//主模板
template <typename T>
class Heap
{
private:
std::vector<T> h_;
public:
void push(const T& val);
T pop();
bool empty() const //const声明在末尾表示该函数不能修改类变量
{
return h_.empty();
}
}
//其实我们真正需要特化的是 push 和 pop两个函数.
//对比显式特化,它是通过主模板,再写一个模板显式特化版本类;
//而这里只是对类模板成员进行了单独特化.
template<>
void Heap<const char*>::push(const char *const &pval)
{
h_.push_back(pval);
std::push_heap(h_.begin(),h_.end(),strLess);
}
template<>
const char* Heap<const char*>::pop()
{
std:pop_heap(h_.begin(),h_end(),strLess);
const char* tmp = h_.back();
h_.pop_back();
return tmp;
}
注意,这些函数的接口必须和 "它们正在特化其成员" 的模板的相应接口相匹配.如例1, 就得和主模板的接口相匹配.而如果你是自己再定义的一个显式/局部特化版本类,就不需要匹配 一致.(见显式特化和局部特化),最后指出两点: 首先,除了成员函数外,其实成员也可以被显式特化,如静态成员和成员模板.其次,显式特化是为模板或模板成员提供定制版本的一种手段;而显式实例化仅仅是明确地告诉编译器去实例化一个成员.
注:相关教程知识阅读请移步到C++教程频道。










