C++中函数模板能够重载吗
来源:百度知道 编辑:UC知道 时间:2024/06/17 00:11:38
我试了一下,好像不能。。。
重载是完全可能,只是在有的时候会产生歧义,导致出错.
错误例子
EXP1:
template<class T>
T * fun(T *t)
{
return *t;
}
template<class T>
T fun(T t)
{
return t;
}
int main()
{
int a=5;
fun(a);
fun(&a);
return 0;
}
这种就运行同不过
原因是模板函数是以实参推断形参的类型,再来调用.
在上面主要错的是fun(&a),我们既可以把形参类型推断为int*
那么它可能去匹配T t,这里的T解释为int *
也可以推断为int类型 那么它会去匹配T *t,这里的T解释为int
所以2个方法都可能会调用,所以会产生歧义!
Exp2
template<class T>
T * fun(T *t)
{
return t;
}
template<class T>
T fun(T t1,T t2)
{
return t1+t2;
}
int main()
{
int a=6;
fun(a,5);
fun(&a);
return 0;
}
这个就