泛型编程(Generic Programming, GP)是一种基于参数化(parameterization)的编程技巧:可以使用类型参数化另一种类型(例如,vector 的元素类型就是通过参数确定的);算法也可以参数化另一种算法(例如,使用比较函数参数化排序函数)。GP 的目的是将有用的算法或者数据结构尽可能地一般化,并使其最优化。例如,如果没有 GP,你必须为整型 vector 专门写一个类;然后,为了寻找其中的最大值,你又得为它写一个专门的函数。但是,使用 GP 可以把一切变得更美好:只需要写一个类,即可拥有任何类型的 vector;只需要写一个函数,即可寻找任何类型 vector 中的最大值。例如:
vector<string>::iterator p = find(vs.begin(), vs.end(), "Grail");
vector<int>::iterator q = find(vi.begin(), vi.end(), 42);
这些例子出自标准模板库(ISO C++ 标准库中容器和算法那部分)。TC++PL 中,漫游标准库那章对标准模板库(Standard Template Library, STL)作了简要的介绍。
GP 在某些方面比 OOP 要灵活得多。特别是,它不依赖于层级。例如,int 和 string 之间没有任何层级关系。总的来说,GP 的结构化程度更甚于 OOP。事实上,GP 常被称为“参数多态(parametric polymorphism)”;而 OOP 常被称为“ad hoc 多态”。就 C++ 而言,GP 于编译时就解析了所有名称;它不需要任何动态(运行时)调度。因此,GP 在对运行时效率要求很高的领域占据了主导地位。
请注意,GP 并非万灵丹。很多时候,程序并不需要参数化多态,而需要运行时调度(OOP)。
原文地址:http://www.research.att.com/~bs/bs_faq.html#generic
本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 Bjarne Stroustrup 翻译:antigloss 共同所有,转载请注明原作者和出处。谢谢。