函数模板不会进行自动的参数转换

来源:互联网 发布:淘宝虚拟专营入口 编辑:程序博客网 时间:2024/05/23 12:13

例如有求最大值的函数模板如下:

template<typename T>

 T dg_max(T const &a,T const &b)
{
 return (a>b?a:b);
}

但是如果此时函数调用时a,b两个参数的类型不一样怎么办呢?

比如这样调用:

int main(int argc,char *argv[])
{
 using namespace std;
 int a=1;
 float b=2.0;
 cout<<dg_max(a,b)<<endl;//1
 return 0;
}

由于参数a和b的类型不一致,会产生这样的错误:

“const T gd_max(const T &,const T &)”: 模板 参数“T”不明确

解决办法一般是强制的转换成float,就像这样使用强制转换:

cout<<dg_max<flloat>(a,b)<<endl;

注意这个语句的用法不要和多参数类型的函数模板弄混了,比如这个函数模板:

template<typename T1,typename T2,typename T3>
T3 gd_max(T1 const &a,T2 const &b)
{
 return (a>b?a:b);
}

在使用的时候可以注明参数类型的:cout<<dg_max<int,flloat,float>(a,b)<<endl;

这是按照T1,T2,T3的顺序排列的,也可以单独指定返回值的类型:cout<<dg_max<float>(a,b)<<endl;

这个<float>指的是返回值,由于上面的例子仅有一个参数,所以函参和返回值都是相同的,在进行类似的函数模板调用时,需要使用转换的情况下,记住定义的模板参数有几个,当定义了多个模板参数时,转换的列表中仅有一个类型,那么仅仅进行的是返回值的限定。









阅读全文
0 0
原创粉丝点击