C++基础:函数模板

为了代码重用,代码必须是通用的;通用的代码就必须不受数据类型的限制。那么我们可以把数据类型改为一个设计参数,这种类型的程序设计称为参数化程序设计,软件模板有模板构造,包括函数模板和类模板。

函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,简化重载函数的设计,函数模板的定义如下:

template<模板参数表>

返回类型 函数名 (形式参数表)

{

.......;//函数体

}

<模板参数表>尖括号中不能为空,参数可以有多个,用逗号分开,模板参数主要是模板类型参数。

模板类型参数代表一种类型,由关键字class或typename(建议用typename)后加一个标识符构成,在这里两个关键字的意义相同,它们表示后面的参数名代表一个潜在的内置或用户设计类型。

如下所示:

cpp 复制代码
template<typename T>   //class  typename
T Max(T a, T b)
{
	cout << "a type" << typeid(a).name() << endl;
	cout << "T type" << typeid(T).name() << endl;  //对类型进行识别
	return a > b ? a : b;
}


int main()
{
	cout << Max(12, 23) << endl;
	cout << Max('a','b') << endl;
	cout << Max(12.23,34.45) << endl;

}

函数模板根据一组实际类型或值构造出独立的函数的过程通常是隐式发生的,称为模板实参推演。

cpp 复制代码
template<typename T,int N>
void PrintAr(T (&br)[N])
{
	cout << sizeof(br) << endl;
}

int main()
{
	int ar[10] = { 1,2,3,4,5,6,7};
	double dx = {1.2,2.3,3.4,4.5,5.6};
	//typename +elemnum;
	PrintAr(ar);
	PrintAr(dx);
	return 0;
}

相关推荐
王老师青少年编程3 分钟前
csp信奥赛C++高频考点专项训练之字符串 --【字符串基础】:[NOIP 2018 普及组] 标题统计
c++·字符串·csp·高频考点·信奥赛·专项训练·标题统计
冯诺依曼的锦鲤26 分钟前
从零实现高并发内存池:TCMalloc 核心架构拆解
c++·学习·算法·架构
无忧.芙桃1 小时前
C++IO库的超详细讲解
开发语言·c++
爱看书的小沐2 小时前
【小沐学GIS】基于C++渲染三维飞行仿真Flight Simulation(OpenGL )第十三期
c++·qt·webgl·opengl·飞行仿真·flight
你撅嘴真丑2 小时前
最大质因子序列
c++
努力努力再努力wz2 小时前
【MySQL进阶系列】一文打通事务机制:从锁、Undo Log 到 MVCC 与隔离级别
c语言·数据结构·数据库·c++·mysql·算法·github
澈2072 小时前
C++ string全面解析:从入门到精通
数据结构·c++·算法
无忧.芙桃3 小时前
现代C++讲解之变量模板,泛型lambda,函数返回类型推导的使用
开发语言·c++·visualstudio
郝学胜-神的一滴3 小时前
[简化版 GAMES 101] 计算机图形学 07:图形学投影完全推导
c++·unity·图形渲染·three.js·unreal engine
zh_xuan3 小时前
api调试工具增加支持输入请求头
c++·libcurl