函数模板

泛型程序设计
交换两个变量值的函数模板
template <class T>
void Swap(T & x,T & y)
{
  T tmp = x;
  x = y;
  y = tmp;
}
int main(){
  int n = 1, m = 2;
  Swap(n, m); //编译器自动生成 void Swap(int &, int &)函数
  double f = 1.2, g = 2.3;
  Swap(f, g); //编译器自动生成 void Swap(double &, double &)函数
  return 0;
}

函数模板中可以有不止一个类型参数

template<class T1, class T2>
T2 print(T1 arg1, T2 arg2)
{
  cout<< arg1 << " "<< arg2<<endl;
  return arg2;
}

函数模板可以重载, 只要它们的形参表不同即可

 template<class T1, class T2>
 void print(T1 arg1, T2 arg2)
 {
   cout<< arg1 << " "<< arg2<<endl;
 }
 template<class T>
 void print(T arg1, T arg2)
 {
   cout<< arg1 << " "<< arg2<<endl;
 }

C++编译器遵循以下优先顺序:
Step 1: 先找参数完全匹配的普通函数(非由模板实例化而得的函数)
Step 2: 再找参数完全匹配的模板函数
Step 3: 再找实参经过自动类型转换后能够匹配的普通函数
Step 4: 上面的都找不到, 则报错

template<class T>
T myFunction(T arg1, T arg2)
{
  cout<<arg1<<“ ”<<arg2<<“\n”;
  return arg1;
}
myFunction(5, 8.4); //error: replace T with int or double? 二义性
//使用多个类型的参数避免二义性
template<class T1, class T2>
T1 myFunction( T1 arg1, T2 arg2)
{
 cout<<arg1<<“ ”<<arg2<<“\n”;
 return arg1;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容