函数模板:C++中的泛型,解决程序通用性
1、函数模板:template函数模板标识关键字,<>模板类型参数列表,typename定义模板类型参数
template//T 模板类型 万能类型 虚假类型
T Sum(T a,T b)//Sum 模板名
{
return a+b;
}
2、模板实例化:在模板调用点传一个具体的类型重定义typedef模板类型;
Sum(10,20);//实参调用的是模板函数
int Sum(int a,int b)
{
return a+b;
}
3、模板函数:函数,模板实例化后生成的函数
int Sum(int a,int b)//模板函数
{
return a+b;
}
4、函数模板的实参推演:针对模板调用点没有给出具体的类型来实例化,系统/编译器根据实参进行推演用来实例化的类型
1.必须有实参
2.同一模板实参推演出两个不同的类型,编译器会报错;
例:Sum(10,20.1);->实参int 和 double类型,而模板参数类型为相同的类型T,->推演出两个不同的类型int和double,报错;
5、函数模板的特例化:给出的函数模板无法满足某一类型的处理,针对这个类型写一个模板函数;
6、函数模板的类型参数和非类型参数:typename或class定义模板类型参数,一般用typename;
非类型参数:常量不能修改,不能是浮点型;
template <typename T,int a>//a 常量 不能修改 a不能定义成浮点型;
7、函数模板的编译过程:模板在编译阶段,编译:定义点:模板头,调用点:模板体;
8、函数模板的默认值:针对类型(模板类型参数),C++11标准,随机赋予默认值;
没有明确指定类型,不能进行实参推演;
9、函数模板的重载:精确匹配
1、普通函数版本
2、函数模板版本
3、函数模板特例化
调用优先级:普通函数>函数模板特例化>函数模板版本
10、接收不明确类型的返回值:auto自动类型;
11、函数模板的显式实例化:告诉编译器明确生成一个模板函数
template int Sum(int ,int );
一般将函数模板写在头文件里
函数模板
最新推荐文章于 2024-03-26 18:09:08 发布