模板是c++中一个非常重要的额概念,学会使用模板可以是我们程序的效率大大提高。
模板分为两类,包括函数模板与类模板,而在类模板中又可以用到函数模板。
一、函数模板:
模板可以生成通用的函数,这些函数可以接受不同类型的参数,和返回不同类型的参数。
定义模板函数的时候可以使用以下两种形式:
template <class identifier> function_declaration;
template <typename identifier> function_declaration;
无论使用class关键字或者typename关键字都是可以的。
在定义函数的时候把 定义的模板看成一种普通的类型使用就可以了,可以用来声明变量,可以作为放回值使用。
例如交换两个变量的值就可以这么写
<pre name="code" class="cpp">#include<iostream>
using namespace std;
template <class T>
<pre name="code" class="html">void swap_demo (T &a, T &b) {
T temp;
temp = a;
a=b;
b=temp;
}
int main(){ int a = 1, b = 2; cout << "a: " << a << ", b:" << b << endl; cout << "------------------"<< endl; swap_demo(a, b);swap_demo <int> (a,b); cout << "a: " << a << ", b: "<< b << endl; return 0;}
在这个例子中通用类型T 被用作函数swap_demo的参数,所以不需要说明<int>编译器也可以自动检测传入的数据类型,但是我认为加一个<int>可以让我们形成一个良好的习惯。
二、类模板
我们可以定义类模板,让一个类可以有基于通用类型的成员,而不需要在类生成的时候定义具体的数据类型。
例如:
template <class T>
class Demo {
T a=0,b=0;
public:<pre name="code" class="cpp">
Demo (T a, T b){
this.a = a;
this.b = b;
}
void swap_demo (T &a, T &b) {
T temp;
temp = a;
a=b;
b=temp;
}
T getmax();
}<pre name="code" class="cpp">template <class T>
T Demo::getmax() {
T retval;
retval = a > b ? a:b;
return a;
}