函数模板
特点
模板不可以直接使用,他只是一个框架
模板的通用不是万能的
使用方法
自动推导类型
必须推导出一致的数据类型T才可以使用
模板必须确定出T的数据类型,才可以使用
显式调用
普通函数与模板函数区别
普通函数调用可以发送自动类型转换
函数模板调用时
显示指定类型的方式,可以发生隐式类型转换
利用自身自动类型推导,不会发生隐式类型转换
普通模板与函数调用规则
如果函数模板和普通函数都可以实现,优先调用普通函数
可以通过空模板参数列表来强制调用函数模板
函数模板可以发送重载
如果函数模板可以发生更好的匹配,优先调用函数模板
总结:既然提供了函数模板,最好不要提供普通函数,否则容易出现二义性
模板的局限性
特定数据类型,需要用具体化的方式特殊实现
类模板
建立一个通用的类,类中的成员类型可以不具体指定,用一个虚拟的类型来代表
成员函数调用时机
普通函数中成员函数一开始就可以创建
类模板中的成员函数在调用时才创建
类模板对象做函数参数
指定传入类型
参数模板化
整个类模板化
继承
子类继承的父类是一个类模板时,子类在声明的时候,需要指出父类中T的类型
如果不指定,编译器无法给予类分配内存
要想灵活指定出父类中T的类型,子类也需要变为类模板
一般类模板头文件和源文件写在一起,后缀改为.hpp