C++ 模板和泛型编程
所谓泛型编程就是以独立于任何特定类型的方式编写代码。使用泛型程序时,我们需要提供具体程序实例所操作的类型或值。第二部分中描述的标准库的容器、迭代器和算法都是泛型编程的例子。每种容器(如 vector)都有单一的定义,但可以定义许多不同种类的 vector,它们的区别在于所包含的元素类型。
模板是泛型编程的基础。使用模板时可以无须了解模板的定义。本章将介绍怎样定义自己的模板类和模板函数。
泛型编程与面向对象编程一样,都依赖于某种形式的多态性。面向对象编程中的多态性在运行时应用于存在继承关系的类。我们能够编写使用这些类的代码,忽略基类与派生类之间类型上的差异。只要使用基类的引用或指针,基类类型或派生类类型的对象就可以使用相同的代码。
在泛型编程中,我们所编写的类和函数能够多态地用于跨越编译时不相关的类型。一个类或一个函数可以用来操纵多种类型的对象。标准库中的容器、迭代器和算法是很好的泛型编程的例子。标准库用独立于类型的方式定义每个容器、迭代器和算法,因此几乎可以在任意类型上使用标准库的类和函数。例如,虽然 vector 的设计者不可能了解应用程序特定的类,但我们能够定义 Sales_item 对象组成的 vector。
在 C++ 中,模板是泛型编程的基础。模板是创建类或函数的蓝图或公式。例如,标准库定义了一个类模板,该模板定义了 vector 的含义,它可以用于产生任意数量的特定类型的 vector 类,例如,vector<int> 或 vector<string>。本书第二部分介绍了怎样使用泛型类型和泛型函数,本章将介绍怎样自定义模板。