<C++实践系列>C++中的模板(template)
1. 简介 模板是C++在90年代引进的一个新概念,原本是为了对容器类(container classes)的支持 [1] ,但是现在模板产生的效果已经远非当初所能想象。 简单的讲,模板就是一种参数化(parameterized)的类或函数,也就是类的形态(成员、方法、布局等)或者函数的形态(参数、返回值等)可以被参数改变。更加神奇的是这里所说的参数,不光是我们传统函数中所说的数值形式的参数,还可以是一种类型(实际上稍微有一些了解的人,更多的会注意到使用类型作为参数,而往往忽略使用数值作为参数的情况)。 举个常用的例子来解释也许模板就从你脑袋里的一个模糊的概念变成活生生的代码了: 在C语言中,如果我们要比较两个数的大小,常常会定义两个宏: #define min(a,b) ((a)>(b)?(b):(a)) #define max(a,b) ((a)>(b)?(a):(b)) 这样你就可以在代码中: return min(10, 4); 或者: return min(5.3, 18.6); 这两个宏非常好用,但是在C++中,它们并不像在C中那样受欢迎。宏因为没有类型检查以及天生的不安全(例如如果代码写为min(a++, b--);则显然结果非你所愿),在C++中被inline函数替代。但是随着你将min/max改为函数,你立刻就会发现这个函数的局限性 ——