观察以下函数模板实例,虽然解决了不同类型比较的问题,但又产生了新的问题。
#include
using namespace std;
template
T1 const &max(T1 const &a,T2 const & b)
{
return a>b?a:b;
}
void main()
{
cout<<"max(10,9.4)="<<max(10,9.4)<<endl;
cout<<"max(5.6,7.8)="<<max(5.6,7.8)<<endl;
cout<<"max(9.5,6)="<<max(9.5,6)<<endl;
cout<<"max(9,11.2)="<<max(9,11.2)<<endl;
}
以上实例返回值最后一个存在问题,有以下解决方案:
1.显示实例化该参数模版;
#include
using namespace std;
template
T1 max(T1 const &a,T2 const & b)
{
return a>b?a:b;
}
void main()
{
cout<<"max(10,9.4)="<<MAX(10,9.4)<<ENDL;< p>
cout<<"max(5.6,7.8)="<<MAX(5.6,7.8)<<ENDL;< p>
cout<<"max(9.5,6)="<<MAX(9.5,6)<<ENDL;< p>
cout<<"max(9,11.2)="<<MAX(9,11.2)<<ENDL;< p>
}
2. 引入新的模版类型,来定义函数模板的返回类型。
#include
using namespace std;
template
T3 max(T1 const &a,T2 const & b)
{
return a>b?a:b;
}
void main()
{
cout<<"max(10,9.4)="<<MAX(10,9.4)<<ENDL;< p>
cout<<"max(5.6,7.8)="<<MAX(5.6,7.8)<<ENDL;< p>
cout<<"max(9.5,6)="<<MAX(9.5,6)<<ENDL;< p>
cout<<"max(9,11.2)="<<MAX(9,11.2)<<ENDL;< p>
}