C++:函数模板


template <typename T>
int compare(const T &v1,const T &v2){
    if(v1<v2)return -1;
    if(v2<v1)return 1;
    return 0;
}
  1. 模板定义是由关键字"template"开始;
  2. <>内称为参数列表
  3. <>内的每一项称为模板参数
  4. 声明模板参数可以使用关键字class或typename,typename更合理,但class出现的更早;
  5. 在调用函数模板时,会将模板实参绑定到模板参数上,此时会实例化一个特定版本的函数;

template<unsigned N,unsigned M>
int compare(const char (&p1)[N],const char (&p2)[M]){
    return strcmp(p1,p2);
}
  1. 不通过typename或class定义的模板参数称为非类型模板参数
  2. 非类型模板参数在实例化时会被常量值取代,而类型模板参数则会被具体的类型取代;
  3. 对于调用compare("h1","tom"),会被实例化为:int compare(const char (&p1)[3],const char (&p2)[4]);

template <typename T> inline T min(const T&,const T&);
  1. inline关键字在函数模板中的位置

猜你喜欢

转载自blog.csdn.net/bqw18744018044/article/details/81751130