zoukankan      html  css  js  c++  java
  • 高放的c++学习笔记之模板与泛型编程

    函数模板

    作用

    有很多时候参数的类型以及返回值的类型是可变的,我们通过定义模板来让函数能更灵活的运用。 

    我们设计一个比较函数,如果能比较的两个参数是int型的,两个参数也可能都是string型的,单独设计出两个比较的函数就会比较繁琐,此时,我们用到了函数模板。
    template<typename T>
    int cmp(T a, T b){
      return a>b;
    }

    (1)每次调用的时候,编译器用推断出的模板参数来为我们实例化一个特定版本的函数,T可被替换成任意类型。
    (2)template可被class替换,两个的作用是相同的。

    类模板

    定义类模板

    类模板的定义与模板函数的定义类似,但是声明对象的时候略有不同

    template<typename T>class gg{
    public :

    T a;

      gg(T aa):a(aa){};

    };

    gg<string> g("asa");      //声明部分

     

    非类型模板参数

    除了定义类型参数外,还可以在函数中定义非类型参数,一个非类型参数表示一个值而非一个类型。

    例如

    template<typename T, unsigned n>class gg{
    public :
      T a;
      gg(T aa):a(aa){};
      int aa();
    };

    inline和constexpr函数模板

    和正常定义函数一样,将inline或constexpr写在模板之后函数体类型之前。

    类模板的成员函数

    template<typename T, unsigned n>      //表示接下来的是一个模板

    int gg<T, n>::aa(){              //通过gg<T, n>找到函数对应的类
      for(int i = 0;i < n; i++)printf("gaofangzuishuai ");
      return a;
    }

  • 相关阅读:
    团队作业
    第四次作业
    第三次作业
    从电梯问题,看c和c++之间的区别(有点懂了)错觉错觉
    团队作业2
    游戏方案
    电梯调度程序4
    电梯调度程序3
    电梯调度程序2
    电梯调度程序1
  • 原文地址:https://www.cnblogs.com/icodefive/p/4943732.html
Copyright © 2011-2022 走看看