标签:
一. 模板定义
在C++中,模板是泛型编程的基础,它还是创建类或函数的蓝图或公式。
1. 函数模板
首先,我们定义一个函数模板,如下所示:
1 // returns 0 if the values are equal, 1 if v1 is larger, -1 if v1 is smaller 2 template <typename T> 3 int compare(const T &v1, const T &v2) { 4 if(v1 < v2) return -1; 5 if(v1 > v2) return 1; 6 return 0; 7 }
(1)模板形参表
解析:模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。
(2)实例化模板函数
解析:编译器能够确定用什么类型代替每个类型形参,以及用什么值代替每个非类型形参。推导出实际模板实参后,编译器使用实参代替相应的模板形参产生并编译该版本的函数。
(3)inline函数模板
1 template <typename T> inline T min(const T&, const T&)
解析:需要说明的是inline放在模板形参后,返回类型前。
2. 类模板
首先,我们定义一个类模板,如下所示:
1 template <class Type> class Queue { 2 public: 3 Queue(); // 默认构造函数 4 Type& front(); // 返回队头元素的引用 5 const Type& front() const; 6 void push(const Type&); // 在队尾增加一项 7 void pop(); // 从队头删除一项 8 bool empty() const; // 指出队列中是否有元素 9 10 private: 11 // ... 12 }
当我们使用类模板时,必须显示指定实参,比如Queue< vector<double> > qc; 那么Queue中Type的实际类型为vector<double>。
说明:像通常的函数或类一样,我们可以仅对函数模板或类模板进行声明操作而不进行定义操作。
参考文献:
[1] C++ Primer(第4版)
标签:
原文地址:http://www.cnblogs.com/shengshengwang/p/5658613.html