C++泛型编程、模板
模板的定义
模型形参表不能为空
// 比较器
template <tempname T>
int compare(const T &v1, const T &v2)
{
if (v1 < v2) return -1;
if (v2 < v2) return 1;
return 0;
}
inline函数模板定义
template <tempname T> inline int compare(const T &v1, const T &v2);
类模板定义
#include <iostream>
#include <string>
using namespace std;
template <class T1,class T2>
class Pair
{
public:
T1 key; //关键字
T2 value; //值
Pair(T1 k,T2 v):key(k),value(v) { };
bool operator < (const Pair<T1,T2> & p) const;
};
// Pair的成员函数 operator <
template<class T1,class T2>
bool Pair<T1,T2>::operator < (const Pair<T1,T2> & p) const
{
return key < p.key;
}
int main()
{
Pair<string,int> student("Tom",19); //实例化出一个类 Pair<string,int>
cout << student.key << " " << student.value;
return 0;
}
非类型模板形参
// T是类型模板形参, N是非类型模板形参
template <tempname T, size_t N> void init_array(T (&parm)[N])
{
for (size_t i = 0; i != N; ++i)
{
parm[i] = 0;
}
}
int x[42];
double y[10];
init_array(x); // init_array[int y[42]);
init_array(y); // init_array[double y[10]);