Chinaunix首页 | 论坛 | 博客
  • 博客访问: 210193
  • 博文数量: 89
  • 博客积分: 2531
  • 博客等级: 少校
  • 技术积分: 830
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-19 10:10
文章分类
文章存档

2011年(6)

2010年(26)

2009年(35)

2008年(22)

我的朋友
最近访客

分类: C/C++

2008-10-26 00:12:05

在当一个函数的返回值不是形参表中的任何一个类型的时候,是需要模板的显式实参的最佳时机,举个例子来说,我们有一个求和函数,要返回求和的结果,如下Template
??? sum(const T& x,const T& y )
{
 return x+y;
}
这个时候我们的返回值是一个问题,指定任何一个都不合适,怎么解决呢?就是加上一个显式的模板参数
Template<typename T1,typename T2>
T1 sum(const T2& x,const T2& y )
{
 return x+y;
}
现在调用这个函数的的时候,必须由用户指定第一个模板形参,因为它不可能有模板参数推断得到,所以要这么做
Int in = 34;
long lng = 78;
Long sum = sum(in,lng);
指定模板形参的格式是在函数标识符后,函数形参表前,用<>括起来这样一个语法
有了这个就方便了,我们知道,只有一个模板形参的函数在调用的时候是必须要完全匹配才能被调用的,所以这样的代码就不能通过编译了
Template<typename T>
Bool compare(T x,T y)
{
 Return x>y;
}
Int main()
{
 Int I = 9;
Short sh = 8;
Cout<}
这时候就是显式模板参数发挥作用的时候了,我们把上述出错的那句改成
Cout<(I,sh);
通过了
注意了,这也仅仅发生在两个实际参数类型可以发生隐式转换的时候,也就是说一下的代码还是错误的
template<class T>
bool compare(T X,T Y)
{
 return X>Y;
}


int main()
{  

 int a = 90;
 string b = "s";
 cout<int>(a,b);

 return 0;
}


阅读(576) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~