我们现在有几个变量,我们向要实现他们的交换,所以我们现在写了一个swap函数
我们现在可以实现对这两个变量之间的交换, 那么我们有有两个变量需要交换呢??
我们刚才的Swap函数的参数是int类型的,我们现在的两个变量是double类型的,那么我们想要交换double类型的函数可以吗? 不可以
但是由于我们的是C++可以实现函数重载,所以我们还可以写一个和刚才的swap函数逻辑完全相同的一个参数为double的函数
这下我们有了double类型的Swap函数,我们这下就可以实现刚才的double类型的变量交换了,但是我们有两个逻辑完全相同的函数,仅仅是参数不同,那么我们是比较不舒服的,所以我们在C++中还有一个语法就是模板
函数模板
下面我们来看一下函数模板
函数模板是什么呢?? 我们拿刚才的Swap函数举例来说,如果我们向实现可以交换任意类型的Swap函数,那么我们应该怎么做呢? 如果我们把所有需要都类型都写一遍那么代码就太冗余了,所以我们不可以这样,下面我们来说一下怎么做
我们来看一下,我们的template就是模板,然后我们的template后面的<>(尖括号),里面是模板参数
我们的函数模板后面的类型,除了可以用class 还可以使用typename,而这个T,就是我们的函数的参数类型
我们现在有这几个变量向实现Add,那么我们怎么实现呢?
就是这样,那么我看来看一下,是否和我们想要的效果一样
和我们想要的效果还是一样的,那么我们现在还是想实习Add但是我想实现int 和 double的呢??
我们看到出错了
这里因为我们的函数模板参数只有一个值,但是这里传过去两个int 和 double,所以编译器并不知道用哪一个来定义我们的函数 ,所以这里是实例化不明确导致,那么我们应该怎么解决呢?
模板显示实例化
就是显示实例化
我们的显示实例化,就是在函数后面添加<>里面写上想要实例化的具体类型,这样之间指明道路,我们的编译器也可以帮我们更好的做事
而且我们的模板参数也并不知只能传一个,我们也可以有两个模板参数
就是这样,那么我们现在传两个类型的参数即使不用显示实例化,编译器也可以自动推导出来
虽然我们现在可以传两个类型的参数,但是我们的返回类型却只有一个
类模板
我们现在有一个stack的类
我们现在有一个程序,现在它有两个Stack的对象,其中一个想存int, 另一个想存 double
那么我们应该怎么做呢? 我们是应该 写两份相同的逻辑的代码吗? 显然不是
我们可以使用我们的类模板
就像是这样,如果我们现在既有int 也有double我们想存到Satck里面,我们闲杂ijiu可以依靠我们的模板来帮我们实例化出多份,不需要我们自己实现
但是我们来看一下,我们现在的s1 和 s2却出错了,为什么呢?
因为对于我们的普通类而言 ,我们的类名就是类型,但是对于模板类而言,我们的类名就是类名,我们的类型是类名加<模板参数类型>才是类型
是这样的,由于我们的函数模板有时可以依靠传的值来推测我们的类型,但是类模板却不可以,所以我们的类模板必须要显示实例化
今天的模板就到这里