最近,看了很多码神级人物的代码,发现其代码很炫酷,尤其对模板的使用,作为小码农,感觉已经落伍了,所以应该发奋图强,好好学习和掌握模板这个东西。
模板是什么呢?有人说一个模板就是一个创建类或函数的蓝图或者公式,什么意思呢?就是说模板是创建类或者函数的母体或生成器,你给一些参数,模板就能够创建出一个类或者函数。
那么模板怎么定义呢?模板定义以关键字template开始,后跟一个模板参数列表,这是一个逗号分隔的一个或者多个模板参数,用<>包围起来。for example:
template <typrname T> int compare(const T &v1, const T &v2) { if (v1 < v2) return -1; if (v1 > v2) return 1; return 0; }
模板参数表示在类或者函数定义中用到的类型或值。类似函数实参和形参的概念,当使用模板时,我们指定模板实参,将其绑定到模板参数上。那么模板实参怎么来呢?当我们调用一个函数模板时,编译器用函数实参推断模板实参。当编译器实例化一个模板时,它使用实际的模板实参代替对应的模板参数,来创建出模板的一个新实例。举个例子:
// template_try.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "iostream" #include "vector" using namespace std; template <typename T> int compare(const T &v1, const T &v2) { if (v1 < v2) return -1; if (v1 > v2) return 1; return 0; } int _tmain(int argc, _TCHAR* argv[]) { cout << compare(1, 0) << endl; vector<int> vec1,vec2; for(vector<int>::size_type ix = 0; ix !=3; ix++) { vec1.push_back(ix+1); vec2.push_back(ix+4); } cout << compare(vec1, vec2) <<endl; return 0; }
运行结果: