调试环境 win10+vs2015
模板是c++中泛型编程的基础,一个模板就是一创建类或函数的蓝图或者说公式。(c++ primer)
其实模板对于我们生活来说是十分常见的,在编程这里也不例外。
对于编程的初学者来说,多写一点代码,可以增加代码熟练度,但是对于工程来说,那就是浪费时间。
所以c++提供了模板这个机制。
如何编写一个通用的加法函数
- 使用函数重载,针对每个所需相同行为的不同类型重新实现它
缺点:
只要有新类型出现,就要重新添加对应函数
出类型外,所有函数的函数体都相同,代码重复率不高
如果函数只是返回值类型不同,函数重载不能解决
一个方法有问题,所有方法都有问题,不好维护 - 使用公共基类,将通用代码放在公共的基础类里面
缺点:
借助公共基类来编写通用代码,将失去类型检查的优点
对于以后实现的许多类,都必须继承自某个特定的基类,代码维护更加困难 - 使用特殊的预处理程序
缺点
不是函数,不进行参数类型检测,安全性不高 - 使用模板
声明模板
函数模板:代表了一个函数家族,该函数与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。
//模板函数以关键字typelate开始,后跟一个模板参数列表,里面是模板参数的列表,以逗号分隔,用<>括起
template<typename T>//typename也可以使用class来代替,但是最好用typename,一些较早的编译器可能不识别class
T fun(T t1,T t2){}//定义了一个模板函数,如果函数函数需要定义成内联函数,inline关键字必须房子啊模板形参表之后,返回值之前,不能放在template之前
注意:
一个模板函数之前必须有与之匹配的template,也就是说一个template关键字只能修饰一个模板函数
例如