首先,特化是什么?
之前实现vector时,我们发现传参传string时,拷贝构造与扩容不应该用简单的浅拷贝,而是应该调用赋值实现。但是对于int,char这种内置类型又可以直接使用值拷贝,显然我们不能在同一份代码里对于不同类型实现两个方法。
也就说明,当一个模板类不能适用于所有类型时,我们可以单拉出来一个特化出来的类,当我们需要这个类的时候编译器会去找这个被特化的类。
全特化
比如上面那个例子:我们可以将某一个类拎出来特化。
通俗点说,全特化,就是限定死这个模板的类型
还是用vector来说明:
template<class T>
class Vector
{
public:
Vector()
{
cout<<"class T Vector()"<<endl;
}
protected:
size_t size;
size_t capacity;
T* data;
};
template<>
class Vector<int>//全特化
{
public:
Vector()
{
cout<<"class int Vector()"<<endl;
}
protected:
size_t size;
size_t capacity;
int* data;
};
int main()
{
Vector<int> v1;
Vector<double> v2;