|
发表于 2009-11-6 01:26:26
|
显示全部楼层
IP:江苏扬州
另外vc6是不是模板重载后不能识别指针参数和非指针参数?
如非模板:
#include<iostream>
inline int* const& max(int* const& a,int* const& b)
{
return *a<*b?b:a;
}
inline int const& max(int const& a,int const& b)
{
return a<b?b:a;
}
int main()
{
int a=7;
int b=42;
int* p1=&b;
int* p2=&a;
::max(p1,p2);
return 0;
}
正确调用inline int* const& max(int* const& a,int* const& b) 。
如模板:
#include<iostream>
template<typename T>
inline T* const& max(T* const& a,T* const& b)
{
return *a<*b?b:a;
}
template<typename T>
inline T const& max(T const& a,T const& b)
{
return a<b?b:a;
}
int main()
{
int a=7;
int b=42;
int* p1=&b;
int* p2=&a;
::max(p1,p2);
return 0;
}
编译错误,max(p1,p2);不清楚调用哪个覆盖。
所以vc6.0模板重载还是不要改变参数指针类型,只能改变参数数量或显示指定参数类型。
以上程序在devc++里都编译正确。 |
|