C++模板

模板是C++中的一个强大特性,它可以创建泛型类和函数,提高代码复用性和灵活性。本文将通过示例代码介绍C++模板的基本用法。

一、函数模板

函数模板使用template关键字声明,后跟函数模板名和模板参数:

template <typename T> 
T max(T a, T b) {
  return a > b ? a : b; 
}

可以传入不同类型来调用函数模板:

int a = 1, b = 2; 
double c = 1.1, d = 2.2;

max(a, b); // 调用 max<int>
max(c, d); // 调用 max<double>

二、类模板

类也可以被参数化成模板:

template <class T>
class Array {
  T arr[100];

public:
  T& operator[](int i) {
    return arr[i];
  }
};

三、模板参数

模板参数可以是类型,也可以是非类型值:

template <typename T, int maxSize>
class Array {
  T arr[maxSize];
  // ...
};

四、模板特化

可以为某个具体类型的类模板做特化化实现:

// 类模板 
template <typename T>
class Array {...}; 

// 整型数组特化
template <> 
class Array<int> {
  int arr[100];
};

五、基本语法要点

  • 使用typename关键字表示类型参数
  • 模板必须先声明后使用
  • 可以为模板做部分或完全特化
  • 模板也支持过载和继承

模板是C++强大和高级的特性,利用模板可以大大提高代码复用性,构建高度抽象和灵活的系统。但是模板的使用也需要付出复杂性成本。