一、模板
在没有模板之前,如果我们写一个swap()两数交换函数,因为我们要支持 int 与int 交换 、double 与 double 交换等等情况,所以要实现swap()函数的多个重载,显得很繁琐,于是就引入了模板。
模板就是在需要模板的地方的上面加一行:template<typename T> 或 template<class T>
需要多个参数还可以加:template<class K, class V>
这里 T 就代表的是一个不具体的类型,在调用时编译器自动识别会实例化或者我们手动给它实例化。
例如:
template<class T>
void swap(T& x, T& y)
{
T tmp = x;
x = y;
y = tmp;
}
二、函数模板
1、推演实例化:上例所展示的就是函数模板,函数模板可以推演实例化,就是根据参数的类型,来推演T的类型。
2、显式实例化:在调用的时候显示给参数,直接实例化T的类型。
推演实例化,传的x和y是int类型,编译器会推演出T的类型为int
而无参数的函数就必须显式实例化,因为没参数无法推演。
要显式实例化:
三、类模板
类模板没有参数来推演,所以必须显式实例化。
一个简化版的栈 ,typeid看类型。
显式调用:
讲解就到这里,感谢大家观看