C++函数模板
2012-05-01 15:20 youxin 阅读(387) 评论(0) 编辑 收藏 举报 泛型编程是一种思想,模板是实现这种思想的基础,STL则是使用模版技术体现泛型思想的结果。
对不同类型数据施以相同操作的一族函数,为重用代码,我们可以把不同的数据类型抽象为类型参数,从而把这多个函数用统一的函数模板(function template)表示出来。从另一个角度说,函数模板也是生成具体函数的模型和样板。
函数模板的定义
template <模板参数表>
类型名 函数名(数据形参表)
{
函数体
}
<模板参数表> 尖括号中不能为空,参数可以有多个,用逗号分开。模板参数主要是模板类型参数。
模板类型参数代表一种类型,由关键字 class 或 typename(建议用typename ) 后加一个标识符构成,在这里两个关键字的意义相同,它们表示后面的参数名代表一个待确定的内置或用户定义的数据类型。
使用函数模板可能会产生二义性:
产生二义性,系统不能确定将其中的一个参数由整数转化为实数,还是应该将另一个参数由实数转化为整数 。
可使用强制类型转换解决:
int a =max( (int)10.5, 20);
double b =max( (double ) 10, 20.6);
模板函数的覆盖
下列函数模板:
template <typename T>
T max(T a, T b)
{
retum a>b?a:b;
}
对于支持运算符“>”的数据类型,如整型、实型、字符型、string数据,这个模板能够正常工作。对于不支持运算符“>”的数据类型,譬如C字符串类型,用上述模板就会出现问题,因此要为其编写独立的max()函数。
我们将函数模板生成的函数称为模板函数。如果某一函数的函数原型与函数模板生成的函数(模板函数)原型一致,则称该函数为模板函数的覆盖函数。
在进行函数调用时,编译程序采用如下策略确定调用哪个函数:
(1)首先寻找一个实参与形参完全匹配的普通函数,如果找到,则调用该函数;
(2)如果能通过函数模板实例化生成模板函数,并且参数匹配,则调用该函数;
(3)如果所有努力失败,则给出出错信息。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!