模板笔记(1)

//第一个例子,函数模板,模板的重载,模板中的参数不会进行
//隐式类型转化
template <typename T>
T const &max(T const &a,T const &b)
{
return a >b ? a:b;
}
//下面定义一个重载版本,编译器会优先调用非重载的版本
int const &max(int const a, int const &b)
{
return a>b?a:b;
}

//第二个例子,类的模板
template <typename T>
class firstTemplate
{
public:
firstTemplate(T xa, T xb):a(xa),b(xb)
{

}
void foo()
{
cout << (this->a+this->b);
}
private:
T a;
T b;
};
//模板的特化,为了让某个类更好的适应某一类型,特化时可以增加成员变量已经成员函数
template<>
class firstTemplate<int>
{
public:
firstTemplate(int xa, int xb):a(xa),b(xb)
{
c = int();//0初始化,防止没有初始化
}
void foo()
{
cout << (this->a+this->b+this->c);
}
private:
int a;
int b;
int c;
};

//局部特化
template<typename T,typename T2>
T addvalue(T a, T2 b)
{
cout << "hehe1";
return a+b;
}
template<typename T>
int addvalue(T a,T b)
{
cout << "hehe2";
return a+50;
}

//缺省模板实参
template<typename T1,typename T2 = int>
void foo(T1 a, T2 b)
{
cout << typeid(a).name()<< typeid(b).name();
}

//非类型模板参数
template<typename T,int value>
T subvalue(T const &a)
{
return a-value;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值