模板初阶(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;
};
相关文章
|
3月前
|
编译器
函数模板和类模板(初阶)
函数模板和类模板(初阶)
36 0
|
9月前
|
算法 安全 编译器
C++泛型编程之函数模板
C++泛型编程之函数模板
55 0
|
1月前
|
算法 编译器 程序员
|
1月前
|
存储 编译器 程序员
|
2月前
|
编译器
模板初阶(2):函数模板的匹配原则,类模板的实例化
模板初阶(2):函数模板的匹配原则,类模板的实例化
|
10月前
|
算法 编译器 C++
C++ 泛型编程:函数模板
C++ 泛型编程:函数模板
33 0
|
9月前
|
算法 编译器 C++
C++泛型编程之类模板
C++泛型编程之类模板
41 0
|
存储 编译器 C++
【C++要笑着学】泛型编程 | 函数模板 | 函数模板实例化 | 类模板(二)
本章将正式开始介绍C++中的模板,为了能让大家更好地体会到用模板多是件美事!我们将会举例说明,大家可以试着把自己带入到文章中,跟着思路去阅读和思考,真的会很有意思!如果你对网络流行梗有了解,读起来将会更有意思!
125 1
【C++要笑着学】泛型编程 | 函数模板 | 函数模板实例化 | 类模板(二)
|
算法 编译器 C++
C++学习笔记(九)——模板初阶(泛型编程基础,函数模板,类模板)
C++学习笔记(九)——模板初阶(泛型编程基础,函数模板,类模板)
C++学习笔记(九)——模板初阶(泛型编程基础,函数模板,类模板)
|
编译器
【泛型编程】函数模板
【泛型编程】函数模板
51 0
【泛型编程】函数模板