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, ...)
    {
    }
  • 相关阅读:
    FEniCS 1.1.0 发布,计算算术模型
    Piwik 1.10 发布,增加社交网站统计
    淘宝褚霸谈做技术的心态
    CyanogenMod 10.1 M1 发布
    Druid 发布 0.2.11 版本,数据库连接池
    GNU Gatekeeper 3.2 发布
    Phalcon 0.9.0 BETA版本发布,新增大量功能
    EUGene 2.6.1 发布,UML 模型操作工具
    CVSps 3.10 发布,CVS 资料库更改收集
    Opera 移动版将采用 WebKit 引擎
  • 原文地址:https://www.cnblogs.com/lovemo1314/p/4075221.html
Copyright © 2011-2022 走看看