概念
=============================
C++的模板机制能够将类或函数定义的内部类型和值参数化。这些参数在其他方面不变的代码中充当占位符的角色,在使用的时候,这些参数会被绑定到实际类型上。这就是C++的泛型设计(generic paradigm )。
格式
==============================
C++关键字template用来声明一批参数化的类(模板类)或函数(模板函数)。
一般使用格式如下:
template < template-parameter-list > declaration
你可以像实例化一个普通类一样去实例化一个类模板多次,但你必须以一对尖括号(<>)来包含模板参数。
Array<int> ia1;
Array<float> ia2;
模板函数示例
==============================
比较两个数的大小,这两个数可能是整数,也可能是浮点数,
一般编程我们可能会这样写函数(不考虑用宏)
int max(int i,int j) { return i>j?i:j; }
float max(float i,float j) { return i>j?i:j; }
可能还有写一个double
double max(double i,double j) { return i>j?i:j; }
而利用generic paradigm, 则可以非常简便的写为:
template <class T> T& max(T& t1, T& t2) { return t1>t2?t1:t2; }
模板类示例
==============================
下面这个例子演示了一个类模板以一个类型T及一个非类型模板参数i进行的声明、定义及实例化:
template <class T, int i> class TestClass { public : char buffer[i]; T testFunc(T* p1); }; template <class T, int i> T TestClass:: testFunc(T* p1) { return *(p1++); } int main() { //To create instances of TestClass TestClass<char, 5> ClassInstChar; TestClass<int, 3> ClassInstInt; //..... }