template <typename T>
int compare(const T &v1,const T &v2){
if(v1<v2)return -1;
if(v2<v1)return 1;
return 0;
}
- 模板定义是由关键字"template"开始;
- <>内称为参数列表;
- <>内的每一项称为模板参数;
- 声明模板参数可以使用关键字class或typename,typename更合理,但class出现的更早;
- 在调用函数模板时,会将模板实参绑定到模板参数上,此时会实例化一个特定版本的函数;
template<unsigned N,unsigned M>
int compare(const char (&p1)[N],const char (&p2)[M]){
return strcmp(p1,p2);
}
- 不通过typename或class定义的模板参数称为非类型模板参数;
- 非类型模板参数在实例化时会被常量值取代,而类型模板参数则会被具体的类型取代;
- 对于调用compare("h1","tom"),会被实例化为:int compare(const char (&p1)[3],const char (&p2)[4]);
template <typename T> inline T min(const T&,const T&);
- inline关键字在函数模板中的位置