C++编程点滴3:函数模板重载问题
2009-03-08 13:30
197 查看
#include<iostream>
#include<string>
#include<cstring>
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;
}
template<typename T>
inline char const* const& max(char const* const& a,char const* const& b)
{
return std::strcmp(a,b)<0? b: a;
}
int main()
{
int a=6;
int b=38;
::max(a,b);
std::string s="hello";
std::string f="world";
::max(s,f);
int *p1=&b;
int *p2=&a;
::max(p1,p2); //这里报错
char const *s1 ="David";
char const *s2="Nico";
::max(s1,s2); //这里报错
return 0;
}
注意:在vc6.0重编译出错。
改成如下:
#include<iostream>
#include<string>
#include<cstring>
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;
}
#if 0
//template<typename T>
inline char const* const/*&*/ max(char const* const& a,char const* const& b)
{
return std::strcmp(a,b)<0? b: a;
}
#endif
int main()
{
int a=6;
int b=38;
::max(a,b);
std::string s="hello";
std::string f="world";
::max(s,f);
int *p1=&b;
int *p2=&a;
::max<int>(p1,p2); //这里报错
char const *s1 ="David";
char const *s2="Nico";
::max<const char>(s1,s2); //这里报错
return 0;
}
注意:max会被认为是重定义。需要指定具体使用的模板。
#include<string>
#include<cstring>
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;
}
template<typename T>
inline char const* const& max(char const* const& a,char const* const& b)
{
return std::strcmp(a,b)<0? b: a;
}
int main()
{
int a=6;
int b=38;
::max(a,b);
std::string s="hello";
std::string f="world";
::max(s,f);
int *p1=&b;
int *p2=&a;
::max(p1,p2); //这里报错
char const *s1 ="David";
char const *s2="Nico";
::max(s1,s2); //这里报错
return 0;
}
注意:在vc6.0重编译出错。
改成如下:
#include<iostream>
#include<string>
#include<cstring>
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;
}
#if 0
//template<typename T>
inline char const* const/*&*/ max(char const* const& a,char const* const& b)
{
return std::strcmp(a,b)<0? b: a;
}
#endif
int main()
{
int a=6;
int b=38;
::max(a,b);
std::string s="hello";
std::string f="world";
::max(s,f);
int *p1=&b;
int *p2=&a;
::max<int>(p1,p2); //这里报错
char const *s1 ="David";
char const *s2="Nico";
::max<const char>(s1,s2); //这里报错
return 0;
}
注意:max会被认为是重定义。需要指定具体使用的模板。
相关文章推荐
- C++编程点滴4:二元运算符重载问题
- C++ Template中关于模板类的成员模板函数显示实例化的问题
- C++基础学习系列--2、递归思想,内置函数,函数重载,函数模板,带默认值函数
- 【cocos2d-x从c++到js】JS与C++的交互2——JS与C++的“函数重载”问题
- 从函数重载到函数模板
- 【转】王老师 C++ 函数重载和模板
- C++ 函数模板(十四)--template 泛型函数模板、通用函数、重载模板
- C++普通函数与模板函数以及特化函数重载的优先级问题
- 【cocos2d-x从c++到js】10:JS与C++的交互2——JS与C++的“函数重载”问题
- 类模板与输出函数的重载
- 关于C++模板和重载的小问题
- C++ Primer 模板与泛型编程 重载与函数模板
- C++中形参与const形参的函数重载问题。
- c++泛型编程中函数模板重载和模板特化同时存在时的查找规则
- [置顶] c++ 函数模板重载(数组和指针 一级指针和二级指针)
- 经典问题解析(1)---const和引用、指针与引用、函数重载、C方式编译
- 继承层次中的函数重载问题
- 在js中如何实现方法重载?以及函数的参数问题
- [置顶] 在js中如何实现方法重载?以及函数的参数问题
- 关于C++模板和重载的小问题