zoukankan      html  css  js  c++  java
  • C++ 模板的用法

     C++中的高阶手法就会用到泛型编程,主要有函数模板, 在程序中使用模板的好处就是在定义时不需要指定具体的参数类型,而在使用时确可以匹配其它任意类型, 定义格式如下

    template <class T>
    T func(T ...) 
    {
    }

    让我们来看一个简单例子,写一个swap()将两个整数交换位置,

    void swap(int &a, int &b)
    {
          int tmp;
          tmp  = a;
          a = b;
          b = a;
          return 0;  
    }

    如果我们要将两个浮点型数交换,上面那个swap()肯定不适用,因此为我们还得写如下一个交换函数

    void swap(float &a, float &b)
    {
         float tmp;
          tmp  = a;
          a = b;
          b = a;
          return 0;  
    }

    很显然, 上面两段代码除了参数类型不一样,其它的处理方式完全一样,是不是感觉代码的复用性很差,如果我们要交换两个long类型的数呢,没办法,你不得再写一个上面那样的swap(). 还好C++足够智能,它早就为我们提供了一种更灵活的方法来解决上面这种问题,那就是模板。如果引入模板,上述代码可以由下面一断代替

    template <class T>
    void swap(T &a, T &b)   //T 可由任意类型代替,从而达到泛型效果
    {
          T tmp;
          tmp  = a;
          a = b;
          b = a;
          return 0;  
    }

    主函数

    int main()
    {
          int a=4, b =5;
          long l1=3333, l2 = 5455;
          float f1=234.53, f2 = 34.552;
          swap(a,b); // compiler auto generate a void swap(int &, int &)
          swap(l1,l2);
          swap(f1,f2);   //一个函数可以处理三种类型的参数,这就是模板的魅力
          return 0;
    }

    注意, 模板可以同时定义多个参数,如

    template <class T1, class T2, ....>
    T1 func(T2, ...)
    {
    }
  • 相关阅读:
    DAY 118 ES组合查询
    DAY 117 ES查询
    DAY 116 ES文档操作
    box_sizing
    添加视频
    网页自动刷新
    如何使网页宽度自动适应手机屏幕的宽度?
    存储过程&触发器
    mysql事务
    mysql常用语句
  • 原文地址:https://www.cnblogs.com/lovemo1314/p/4075221.html
Copyright © 2011-2022 走看看