
在我们使用swap函数时我们可能会因为参数类型的不同从而重载函数但是他的缺点也很明显比如1. 重载的函数仅仅是类型不同代码复用率比较低只要有新类型出现时就需要用户自己增加对应的函数2. 代码的可维护性比较低一个出错可能所有的重载均出错这就引发了我们的思考有没有一种模板可以让编译器根据不同类型来生成代码这就是今天我们要学的模板。编写与类型无关的通用代码叫做泛型编程这是代码复用的手段模板是泛型编程的基础分为函数模板和类模板。一.函数模板1.概念函数模板代表了一个函数家族该函数模板与类型无关在使用时被参数化根据实参类型产生函数的特定类型版本。2.函数模板的形式如图2.函数模板的原理函数模板是一个蓝图他本身不是函数是编译器使用方式产生特定具体类型的模具所以模板就是把将本来我们应该做的交给了编译器。3.函数模板的实例化用下列一张图来解释清楚4.模板参数的匹配规则1.一个非模板函数可以与一个同名的函数模板同时存在而且该函数的模板可以被实例化为这个非模板函数2.对于非模板函数和同名函数模板如果其他条件相同在调动时优先调用非模板函数而不是从函数模板中产生一个实例如果模板可以产生一个更好匹配的函数那么将选择模板二.类模板