模板初阶(1):函数模板,类模板

简介: 模板初阶(1):函数模板,类模板

一、函数模板

1.1 概念

函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。

格式: template <typename T>template <class T>

template <class T>
void Swap(T& a, T& b)
{
  T tmp = a;
  a = b;
  b = tmp;
}

int main()
{
  int a = 1, b = 2;
  double d1 = 1.2, d2 = 2.1;

  Swap(a, b);
  Swap(d1, d2);
    
  return 0;
}
1.2 函数模板的原理

在编译阶段,编译器需要根据传入实参的类型推演生成对应类型的函数

1.3 函数模板的实例化

用不同类型的参数使用函数模板时,称为函数模板的实例化。

1. 隐式实例化:编译器根据传入实参的类型推演生成对应类型的函数

如上:Swap()

template <class T>
T Add(const T x, const T y)
{
  return x + y;
}

int main()
{
  int a1 = 1;
  double d1 = 2.0;

    // error
    // Add(a1, d1); // 1. Add(a1, (int)d1); 2. 显式实例化
  return 0;
}
2. 显式实例化:在函数名后的<>中指定函数模板的参数类型
template <class T>
T Add(const T x, const T y)
{
  return x + y;
}

int main()
{
  int a1 = 1;
  double d1 = 2.0;

  Add <double>(a1, d1);// 显式实例化

  return 0;
}

二、类模板

2.1 类模板格式
template <class T1, class T2, ..., class Tn>
class 类模板名
{
    // 类成员定义
};

E.g.

template <class T1>
// typedef int STDateType    

class Stack// Stack不是具体的类,是编译器根据被实例化的类型生成的具体类的模具
{
public:
  Stack(int capacity = 3)
    :_top(0)
    , _capacity(capacity)
  {
    cout << "Stack(int capacity = 3)" << endl;
        // _a = new STDateType[capacity];
    _a = new T1[capacity];
  }

  ~Stack()
  {
    cout << "~Stack()" << endl;
    delete _a;
    _top = _capacity = 0;
  }
private:
    // STDateType* _a;
  T1* _a;
  int _top;
  int _capacity;
};
相关文章
|
编译器
函数模板和类模板(初阶)
函数模板和类模板(初阶)
218 0
|
算法 网络虚拟化 数据安全/隐私保护
计算机网络——数据链路层(三)
计算机网络——数据链路层(三)
785 0
计算机网络——数据链路层(三)
Java——接口(interface)(概念理解+应用举例)
Java——接口(interface)(概念理解+应用举例)
1990 0
Java——接口(interface)(概念理解+应用举例)
|
安全 Java API
微服务技术系列教程(41)- SpringCloud -OAuth2搭建微服务开放平台
微服务技术系列教程(41)- SpringCloud -OAuth2搭建微服务开放平台
740 0
|
监控 调度
队列的深度解析:链式队列的实现
队列的深度解析:链式队列的实现
|
算法 C++ 容器
C++初阶之一篇文章教会你queue和priority_queue(理解使用和模拟实现)(下)
优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器
|
存储 算法 C++
弗洛伊德(Floyd)算法(C/C++)
弗洛伊德(Floyd)算法(C/C++)
|
域名解析 网络协议 算法
|
网络协议 网络架构
计算机网络——数据链路层-可靠传输的基本概念(可靠传输服务、不可靠传输服务,分组丢失、分组失序、分组重复)
计算机网络——数据链路层-可靠传输的基本概念(可靠传输服务、不可靠传输服务,分组丢失、分组失序、分组重复)
729 0

热门文章

最新文章