c++模板实例化、特化、偏特化

1、实例化

实例化很好理解,因为模板在编写的过程中没有传入具体的数据类型,而传入类型并创建实例的过程称之为实例化。

tempalte<typename T>
class DataAdd()
{
public:
    T Add(T a,T b)
    {
        return a+b;
    }
};


//实例化
DataAdd<int> *dataAdd = new DataAdd<int>();
std::cout<<"1+2="<<dataAdd->Add(1,2)<<std::endl;

2、特化

上面的例子展示了一个数据相加相加模板类,但是如果我现在有个特殊需求,就是我的string相加啊,我要让顺序颠倒,比如“123”+“456”本来应该输出“123456”,但是现在我需要让它输出“456123”;
 

tempalte<typename T>
class DataAdd()
{
public:
    string Add(string a,string b)
    { 
        return b+a;
    }
    T Add(T a,T b)
    {
        return a+b;
    }
};

一个模板被称为全特化的条件:1.必须有一个主模板类  2.模板类型被全部明确化

tempalte<>
class DataAdd()
{
public:
    string Add(string a,string b)
    { 
        return b+a;
    }
    int Add(int a,int b)
    {
        return a+b;
    }
};

3、偏特化

还是同样的代码

tempalte<typename T>
class DataAdd()
{
public:
    T Add(T a,int b)
    {
        return a+b;
    }
};

和泛化还有特化不太一样的是,这个只有部分参数是指定类型的

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值