C++:STL模板
STL模板分为函数模板和类模板。
我想交换两个数字,但是类型不同,例如我想交换整形a,b,和double类型的d1,d2。如果使用C语言来实现,那么需要像下面一样写两个swap函数,但是除了类型不同,其它都一样,比较麻烦。为了解决这个问题,提出了函数模板。
交换后的结果:
函数模板:函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。
在编译器编译阶段,对于模板函数的使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。比如:当用double类型使用函数模板时,编译器通过对实参类型的推演,将T确定为double类型,然后产生一份专门处理double类型的代码。
以上可以从汇编代码看出:这确实是生成了两种类型的swap函数,分别进行调用,只不过不需要我们自己写,而是编译器自己处理。
类模板:
用C语言和C++分别实现栈,进行对比:
下面是利用C++写stack,相比于C,C++更简单,不需要写初始化和销毁函数,利用构造函数和析构函数来解决。
模板有显式实例化和隐式实例化: