类模板,函数模板,及其特化

一 使用模板的意义

当我们进行int型数据交换时调用swap函数:

void swap(int &a , int &b)
{
	*a ^= *b;
	*b ^= *a;
	*a ^= *b;
}

但该函数面对double,char,long等其他类型时,不适用
解决办法:重载

void swap(double &a , double &b)
{
	*a ^= *b;
	*b ^= *a;
	*a ^= *b;
}
void swap(char &a , char &b)
{
	*a ^= *b;
	*b ^= *a;
	*a ^= *b;
}

尽管可以解决问题,但代码冗余,没有代码复用,且主体出错时,需要全部重新修改,不推荐


从而C++使用模板,即泛型编程的概念,来解决类型不同,函数体或者类体相同的问题 。

将类型参数化,从而形成模板。

**注:
1,模板需要实例化才能使用,只不过将实例化过程交给编译器完成(重载是人来进行实例化),生成对应类型的函数体,故模板不能够提高代码效率

2,特别关注:模板调用时,类型严格匹配,不允许类型隐式转换

3,模板即类型参数化,特化即类型确定化

**


二 类模板

结构:

template <typename T1 , typename T2>
class myclass{
     T2 fun(T1){}
     T1 data1;
     T2 data2;
};

三 函数模板

结构

template<typename T1 ,typename T2>
T1 funtion(T2 data){
}

四 类模板全特化和偏特化:即确定类型参数

1,全特化结构

template <>
class myclass<int,char>{
     char fun(int){}
     int data1;
     char data2;
};

2,偏特化结构

template <typename T1>
class myclass<T1,int>{
     int fun(T1){}
     T1 data1;
     int data2;
};

四 函数模板全特化:对于函数直接进行重载

结构:

template<>
int funtion(char data){
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值