如何将const char *作为参数与一个采用const int&amp ;?的方法近似匹配的方法

时间:2013-10-07 02:29:52

标签: c++ templates overloading ambiguous-call

以下代码在编译时会抛出编译器错误。

template <typename T>
inline T const& max (T const& a, T const& b)
{
    return a < b ? b : a;
}

// maximum of two C-strings (call-by-value)
inline char const* max (char const* a, char const* b)
{
    return strcmp(a,b) < 0 ? b : a;
}

// maximum of three values of any type (call-by-reference)
template <typename T>
inline T const& max (T const& a, T const& b, T const& c)
{
    return max (max(a,b), c); 
}

int main ()
{
    ::max(7, 42, 68);  
}

编译时我收到错误:

  

错误:调用重载'max(const int&amp;,const int&amp;)'是不明确的

     

注意:候选人是:

     

注意:const T&amp; max(const T&amp;,const T&amp;)[with T = int]

     

注意:const char * max(const char *,const char *)

当我们有与调用匹配的模板方法时,max(const char *,const char *)如何成为max(const int&amp;,const int&amp;)的近似匹配?

1 个答案:

答案 0 :(得分:1)

我敢打赌你的代码中有using namespace std。删除它,你会没事的。

比较:http://ideone.com/Csq8SVhttp://ideone.com/IQAoI6

如果你需要使用命名空间std,你可以强制执行root命名空间调用(在main()中的方式):

template <typename T>
inline T const& max (T const& a, T const& b, T const& c)
{
    return ::max(::max(a,b), c); 
}