模板初阶(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;
};
相关文章
|
8月前
|
编译器
函数模板和类模板(初阶)
函数模板和类模板(初阶)
59 0
|
C++
60 C++ - 类模板的应用
60 C++ - 类模板的应用
40 0
|
3月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
75 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
6月前
|
算法 编译器 程序员
|
6月前
|
存储 编译器 程序员
|
7月前
|
编译器
模板初阶(2):函数模板的匹配原则,类模板的实例化
模板初阶(2):函数模板的匹配原则,类模板的实例化
|
编译器 C++
类模板总结
所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。
|
算法 编译器 C++
C++学习笔记(九)——模板初阶(泛型编程基础,函数模板,类模板)
C++学习笔记(九)——模板初阶(泛型编程基础,函数模板,类模板)
C++学习笔记(九)——模板初阶(泛型编程基础,函数模板,类模板)
|
人工智能 编译器 C语言
【C++初阶】函数模板与类模板
【C++初阶】函数模板与类模板
126 0
【C++初阶】函数模板与类模板