泛型编程是一种高效的的、软件库可复用的编程泛式。它是由 Alexander Stepanov 和 David Musser 创造的。泛型编程的首个成功的应用是标准模板库(STL),它已经成为ANSI/ISO C++标准的一部分。从那以后,泛型编程泛式已经被应用到许多通用程序库的开发中。
泛型编程的过程关注于在同一个算法的相似实现中寻找共性,然后提供一套抽象,这样一个单一的通用算法就能含盖许多具体的实现。这个过程称做lifting,不断重复这个过程,直到泛型算法达到一个合适的抽象级别,这时它应该白日提供最大的复用能力且仍然高效,并独立于实现。抽象本身被表示为只对通用算法的参数的依赖。
一但在某个特定的领域内的许多算法已经被lift,我们将看到需求的模式。对于相同的需求集成为许多不同的算法的要求将是十分平常的。那时,每个需求集将被放入一个concept。Concept描述了一个抽象集,每个抽象又满足一个concept的全部需求。当认真贯彻泛型编程的过程时,concept将显现出以某种逻辑的方法来描述问题域内的抽象概念。例如研究图论算法将产生图的concept,它描述了图的行为;而研究线性代数算法将产生矩阵和向量的concept。因此,泛型编程过程不仅一个产生通用的,可利用的算法实现,还能帮助更好地理解问题域。