http://my.oschina.net/hnuweiwei/blog/268451
如果一段代码除了类型不同,其他都相同,使用模板可以避免重复的工作
模板是一些为多种类型编写的函数或类,类型未指定。使用模板时,把类型作为参数传递给模板。
模板使用非常广泛,c++标准库几乎所有代码都是模板代码
head.h
1 template <typename T> 2 inline T const & maxer(const T & a, const T &b) { 3 return a > b ? a : b; 4 }
Main.cpp
1 #include <cstdlib> 2 #include<iostream> 3 #include"head.h" 4 using namespace std; 5 int main() 6 { 7 cout << "maxer(1,2)is" << maxer(1, 2) << endl; 8 cout << "maxer(1.1,2.4)is" << maxer(1.1, 2.4) << endl; 9 cout << "maxer('a','b')is" << maxer('a', 'b') << endl; 10 cout << "maxer<double>(1,1.2)is" << maxer<double>(1, 1.2) << endl; 11 system("pause"); 12 return 0; 13 }
模板被编译了两次,一次是实例化之前检查模板本身,另一次是实例化期间检查类型或调用,
模板可以被重载,可以和一个同名的非模板函数共存,而且该模板还可以转化为这个非模板函数。对于非模板函数和同名的模板函数,
如果其他条件都相同重载解析过程会调用非模板函数。
如果模板可以产生一个更好的匹配则选择模板函数