10.1 泛型程序设计及STL的结构
10.1.1 泛型程序设计的基本概念
- 编写不依赖于具体数据类型的程序
- 将算法从特定的数据结构中抽象出来,成为通用的
- C++的模板为泛型程序设计奠定了关键的基础
术语:概念
- 用来界定具备一定功能的数据类型。例如:
- 将“可以比大小的所有数据类型(有比较运算符)”这一概念记为Comparable
- 将“具有公有的复制构造函数并可以用‘=’赋值的数据类型”这一概念记为Assignable
- 将“可以比大小、具有公有的复制构造函数并可以用‘=’赋值的所有数据类型”这个概念记作Sortable
- 对于两个不同的概念A和B,如果概念A所需求的所有功能也是概念B所需求的功能,那么就说概念B是概念A的子概念。例如:
- Sortable既是Comparable的子概念,也是Assignable的子概念
术语:模型
- 模型(model):符合一个概念的数据类型称为该概念的模型,例如:
- int型是Comparable概念的模型。
- 静态数组类型不是Assignable概念的模型(无法用“=”给整个静态数组赋值)
用概念做模板参数名
- 很多STL的实现代码就是使用概念来命名模板参数的。
- 为概念赋予一个名称,并使用该名称作为模板参数名。
-
例如
-
表示insertionSort这样一个函数模板的原型:
-
template <class Sortable>
void insertionSort(Sortable a[], int n);
原文链接:侵删