C++:模板全特化、偏特化、类型萃取

首先,特化是什么?
之前实现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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值