模板(C++)
先看一段代码:
template<class T>
T Add(T& left,T& right){
return left+right;
}
此代码实现通用类型的加法,T代表类型
了解什么是泛型编程:
泛型编程
就是与类型无关的通用代码,是代码复写的一种手段,模板是泛型编程的基础,那么模板可以顾名思义,就是直接传递实参就可以调用函数
函数模板原理
(1)隐式实例化:没有确定指定模板参数列表中T的实际类型。
在编译器阶段,编译器要对传递的实参类型进行推演,然后根据推演的结果来确定模板参数列表中T的实际类型,如果确定T的类型则生成具体类型的函数,无法确定则报错。
(2)显示实例化:明确指出模板参数列表中T 的实际类型
编译器会直接根据用户提供的模板参数列表来确定具体类型的函数,将函数生成之后,如果发现类型不匹配则会进行隐式转换,如果转换成功则生成具体类型的函数,转换失败报错。
模板编译过程
(1)没有实例化:编译器只对模板进行简单的语法检测,不会生成真正的代码。
(2)实例化之后:根据用户对模板实例化的类型来生成代码以及对生成的代码进行编译。
如何使用模板
根据模板的编译过程可知如果没有实例化不会生成代码,那么在写代码过程中,如果在.h文件中定义.cpp文件中实现模板这种方式是行不通的,因为没有生成具体的代码会发生链接错误。
因此使用.h/.hpp文件直接完成模板的声明与定义是正确 的。
模板优缺点
(1)优点:
模板复用了代码,节省资源,更快 的迭代开发,C++的标准库也因此产生。并且增强了灵活性。
(2)缺点:
会导致代码膨胀,优惠导致时间变长。如果出现模板编译错误时,错误信息非常凌乱,不易定位错误。