56)函数模板的基本语法

1)问题引入-->为啥有函数模板

      ---->首先是,我们编写一个 交换两个数的C语言代码:

 1 #include<iostream>
 2  
 3 using namespace std;
 4 //加入这两个数是整数
 5 void jiaohuan(int a,int b)
 6 {
 7     a=a+b;
 8     b=a-b;
 9     a=a-b;
10 }
11 
12 //要是两个数double型的
13 void  jiaohuan(double a,double b)
14 {
15     a=a+b;
16     b=a-b;
17     a=a-b;
18 }
19 
20 int main()
21 {
22 
23     
24     return 0;
25 }

    看,我同样是交换两个数,根据不同的数据类型,可能写很多不同类型的函数,那么就增加了维护成本,因为,你每编写一个函数,就得需要维护,

那么  怎么解决这个问题?

就用模板技术--->模板是啥,就是类型参数化,编写代码可以忽略类型,用一个标志或者符号

为了让编译器区分是  普通函数还是模板函数      所以  得告诉编译器----->我要编写模板函数了,所以就有了一个关键子--->template

编写模板函数的步骤:
  1)写上关键子  template

  2)因为,你的函数不同的类型 你得用一个自己的名字代替   那么就有了    

      template  <class  你起的变量的名字>   或者  template  <typename 你起的变量的名字>                 ----->这个就是告诉编译器  我下面要写模板函数了,所以啊,你要是遇到奇怪的东西  不要报错。

  3)然后写我的模板函数了:

 1 //下面是模板函数
 2 template <class wangchao>
 3 void hh(wangchao &a,wangchao &b)
 4 {
 5     a=a+b;
 6     b=a-b;
 7     a=a-b;
 8 }
 9 int main()
10 {
11 
12     int a=3;
13     int b=4;
14     hh(a,b);
15     cout<<a<<endl;
16     cout<<b<<endl;
17     return 0;
18 }

注意:
    1)template  <class t1,class t2.class t3~~~~~~~~~~~~~~~>       这个尖括号里面可以写很多个,并不是只有一个的

    2)templata仅仅对它下面的第一个函数有作用,第二个就不起作用了,所以  你还得重新定义你的template<class tt>

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

上面的模板方法在main中能运行,怎么判断的变量类型:
      1)上面的  hh(a,b)   是编译器自动推导的,根据你调用模板方法时传的参数类型,去替换掉你编写模板方法时  写的那个自己的变量类型wangchao

      2)可以显式指定类型---->   hh<int>(a,b)    就是告诉编译器,我的传的值是int的

原文地址:https://www.cnblogs.com/xiaoyoucai/p/8279646.html