C++模板

函数模板参数列表

template< > 

函数模板

//函数模板
template<typename T>     
bool Compare(T a,T b)
{
	cout<<"template Compare"<<endl;
	return a>b;
}

模板类型参数

     typename/class 参数类型

模板的实例化(显示实例化、隐式实例化)   //在调用点实例化

//隐式实例化   //并没有指定出要实例化什么样的函数
//int -> 实例化模板 -> int Compare<int>
Compare<int>(10,20);
Compare<double>(10.1,20.2);
//显示实例化
template bool Compare<int>(int,int);
template bool Compare<double>(double,double);
template bool Compare<float>(float,float);

模板函数

//函数模板 ->实例化 -> 模板函数
bool Compare(int a,int b)
{
	cout<<"template Compare"<<endl;
	return a>b;
}

模板的非类型参数 

必须是常量,不能是常变量
int SIZE    //本身就是个常量,不能更改

模板的实参推演

//模板的实参推演       
//实参的类型 -> 推演 -> 模板类型参数是什么
Compare(10,20);

模板的特例化(专用化)

//模板的特例化(专用化)
template<>
bool Compare<char*>(char* a,char* b)
{
	cout <<"Compare<char*>(char* a,char* b)"<<endl;
	return strcmp(a,b) > 0 ? true : false;
}

非函数模板

//非函数模板
bool Compare(int a,int b)
{
	cout<<"Compare(int,int)"<<endl;
	return a>b;
}

模板函数的重载
函数模板<->模板的特例化<->非函数模板   可以共存构成模板函数的重载
优先级     <                       <

小结:

1、模板的代码不进行编译 没有任何的实例化  没有产生任何的函数

模板的调用

2、模板的实例化是在编译阶段的

3、函数模板 只支持模板的完全特例化,不支持模板的部分特例化

     只有类模板才支持模板的部分特例化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值