C++编程点滴3:函数模板重载问题

#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会被认为是重定义。需要指定具体使用的模板。

 

 

你可能感兴趣的:(C++编程点滴3:函数模板重载问题)