目录
最近在看智能指针的源码,发现其中用了很多模板特例化,本文就来总结一下,什么是模板特例化。
特例化,顾名思义:特殊实例化,将函数模板或类模板实例化为特殊的类型,通过模板特例化可以定制在特定模板参数下的函数模板/类模板实现,或者禁用特定模板的函数模板/类模板。
函数模板特例化
既然是特例化,那么自然就需要有一个“原型”,现在假设一个原型模板函数compare,用来比较传入的两个参数的大小,如下所示:
template<typename T>
bool compare(T param1,T param2)
{
return param1 < param2;
}
通过这个模板函数,可以传入任意类型的两个参数,如compare(1,2); compare(1.1,2.1);
那要是compare("hello","hey");呢?传入的两个参数类型为const char *类型的指针,这种情况如果还只是比较两个指针的大小,显然是不行的,应当使用strcmp来比较。所以,当模板参数类型为const char *类型时,这就需要进行“特例化