C++模板:函数模板、类模板
模板是一个将数据类型参数化的程序设计工具。代码与数据类型相脱离。
将数据类型作为模板参数,在使用模板时再根据实参的数据类型确定模板参数(即数据类型)。
代码可重用,特别是函数参数或者数据成员的类型多样而函数的类的功能相同时。
1. 函数模板
template <class T> // 或者 template <typename T>
T abs( T val)
{
return val < 0 ? - val : val;
}
多个类型参数:template <class T1,, class T2, class T3 ... >
调用:
int i = 0; cout << abs(i) << end; // 类型T被替换为int
编译器编译时,为每一条函数模板调用语句生成函数模板的一个实例(模板函数),成为函数模板的实例化。函数模板本身不产生可执行代码,只有在实例化时编译器才根据 实参的类型进行类型参数的替换,生成一个真正的函数,然后再对该函数进行编译。
2.类模板
类是对对象的抽象,类模板是对类的抽象。“带参数的类”,“类工厂”
template <class T>
class MyTemClass
{
private:
T x;
public:
void setX(T a) { x = a; }
T GetX(){ return x; }
};
// 在模板类的外部定义模板类的成员函数
template <class T> // 不能少
void MyTemClass<T>::setX(T a)
{
x = a;
};
使用: MyTemClass<int> intObject;
多个参数的类模板:
template <class T1, int i, class T2>
class MyTemClass
{
...
}
调用: MyTemClass<int, 100, float> MyObjClass;