本节书摘来自异步社区出版社《C++编程风格(修订版)》一书中的第3章,第3.6节,作者:【美】Tom Cargill,更多章节内容可以访问云栖社区“异步社区”公众号查看。
3.6 模板
C++编程风格(修订版)
IntStack和CharStack的共同属性可以用另一种不同的方式来表达,即C++的模板机制。模板也被称之为参数化类型,在程序清单3.5中给出了堆栈的模板。
程序清单3.5 Stack模板
Stack模板定义了一组类。在使用Stack模板来声明一个对象时,必须同时提供一个类型来替换模板声明中的类型T。例如,
在上面的语句中,声明了一个对象stackOfChar,这个对象是一个存储10个char类型值的堆栈,而在下面的语句中:
声明了一个对象stackOfInt,这个对象是一个存储20个int类型值的堆栈。函数push()中的参数类型和pop()的返回类型也都是T。
将模板增加到C++的主要推动力是因为模板可以支持通用的集合类。我们不仅可以创建整数类型的堆栈和字符类型的堆栈,还可以创建浮点类型的堆栈、char指针类型的堆栈等。
用模板来实例化的对象与那些使用IntStack和CharStack来实例化的对象在行为上只存在细微的差别。在最初的CharStack构造函数中,可以带有第二个参数,用于指定将要压入栈中的字符串。但在IntStack的构造函数中并没有这个参数。因此,如果使用模板来同时表示这两个类,那么这个差别将无法表达出来。