C++的模板参数

来源:互联网 发布:淘宝宝贝详情制作 编辑:程序博客网 时间:2024/06/11 18:27

模板的参数分为模板参数和调用参数。

例如:

template <typename T1, typename T2, typename T3>
inline T1  max(const T2 a, const T3 b) 

    //TODO: 代码实现 ... 
}

其中,第一行定义了模板参数,第二行定义了模板的调用参数。需要注意的是返回值并不属于模板的调用参数。

 

下面以实例讲解一下模板参数:

#include<stdio.h>template <typename T> // 只定义一个模板参数。inline T max(const T a, const T b)  {  return a < b ? b : a;  }  template <typename T> inline T max1(const T a, const T b)  {  return a < b ? b : a;  }  inline int max1(const int a, const int b)  {  // 为了便于区分,让返回结果+100 return a < b ? b+100 : a+100;  } template <typename T1, typename T2, typename T3>  // 从左至右定义了三个模板参数。 inline T1  max2(const T2 a, const T3 b)  {  return a < b ? b : a;  }  void main(){inti;double  d;// 不指定模板参数,隐式实例化模板。虽然没有显示地模板参数,但编译器自动推导出函数模板参数为int。i = max(42, 66); printf("i = %d\n", i);// 如果非模板函数和推导后的模板函数一样,会产生什么结果呢?下面调用的究竟是模板函数还是非模板函数呢?// 实际是这样的,首先查看是否有满足要求的非模板函数,如果没有,再根据参数去匹配并实例化相应的模板函数,所以这里调用的应该是非模板的max1函数。i = max1(42, 66); printf("i = %d\n", i);// 指定模板参数,显示实例化模板。d = max<double>(4, 4.2); printf("d = %f\n", d);// 使用部分缺省的模板参数,不用指定全部的模板参数。如下,从左到右地指定一部分参数,只指定第一个返回参数,即要求返回double类型。// 由于返回参数不属于调用参数,所以必须明确的指出它的类型;而T1和T2属于调用参数,编译器能从函数调用中推导出来。d = max2<double>(4, 4.2); printf("d = %f\n", d);getchar();return;}




 

0 0