Web-Published by 8848software-SCMChina © 2003 http://www.8848software.com
1
8848SOFTWARE-SCMCHINA
泛型编程与设计新思维
泛型编程与设计新思维
徐景周
前言
永远记住,编写代码的宗旨在于简单明了,不要使用语言中的冷僻特性,耍小聪明,重要
的是编写你理解的代码,理解你编写的代码,这样你可能会做的更好。
--- Herb Sutter
1998 年,国际 C++标准正式通过,标准化对 C++最重要的贡献是:对“强大的抽象概
念”给于更有力的支持,以降低软件的复杂度,C++提供了二种功能强大的抽象方法:面向对
象编程与泛型编程。面向对象编程大家一定很熟悉了,这里就不再哆嗦了。提到泛型编程
(Generic Programming)
,有的人可能还不太熟悉,但是提到
STL
,你就一定会有所耳闻了。
STL(Standard Template Library,标准模板库) 其实就是泛型编程的实现品,STL 是由 Alexander
Stepanov(STL 之父)、David R Musser 和 Meng Lee 三位大师共同发展,于 1994 年被纳入 C++标
准程序库。STL 虽然加入 C++标准库的时间相对较晚,但它却是 C++标准程序库中最具革命性
的部分,同时也是
C++
标准程序库中最重要的组成部分。由于新的
C++
标准库中几乎每一样东
西都是由模板(Template)构成的,当然,STL 也不会例外。所以,在这里有必要先概要说明一
下模板的有关概念。
模板概念
通过使用模板可以使程序具有更好的代码重用性。记住,模板是对源代码进行重用,而不
是通过继承和组合重用对象代码,当用户使用模板时,参数由编译器来替换。模板由类模板和
函数模板二部分组成,以所处理的数据类型的说明作为参数的类就叫类模板,而以所处理的数
据类型的说明作为参数的函数叫做函数模板。模板参数可以由类型参数或非类型参数组成,类
型参数可用 class 和 typename 关键字来指明,二者的意义相同,都表示后面的参数名代表一个
潜在的内置或用户定义的类型,非类型参数由一个普通参数声明构成。下面是类模板和函数模
板的简单用法:
template<class T1, int Size>
class Queue // 类模板,其中 T1 为类型参数,Size 为非类型参数
{
public:
explicit Queue():size_(Size){}; // 显式构造,避免隐式转换
……
template<class T2> void assign(T2 first,T2 last); // 内嵌函数模板
private:
T* temp_;
int size_;
}
// 类模板中内嵌函数模板 Compare 的外围实现(如在 Queue 类外实现)
template<class T1,int Size> template<class T2>
void Queue<T1,Size>::assign (T2 first,T2 last) {};
// 模板的使用方法
int ia[4] = {0,1,2,3};
Queue<int, sizeof(ia)/sizeof(int)> qi;
qi.assign(ai,ai+4);