Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数重载不会';t在C+中使用模板+;? 我学习C++,我已经看过模板的用法。_C++_Templates_Overloading - Fatal编程技术网

函数重载不会';t在C+中使用模板+;? 我学习C++,我已经看过模板的用法。

函数重载不会';t在C+中使用模板+;? 我学习C++,我已经看过模板的用法。,c++,templates,overloading,C++,Templates,Overloading,因此,我尝试使用以下模板实现以下两个功能: template <typename T> T max(T a, T b){ return (a > b) ? a : b; } template <typename T> T max(T a, T b, T c){ return max( max(a, b), c); } 上面的代码编译时没有错误 有人能解释一下吗 我哪里做错了?有一个问题与你有冲突。您是否有使用命名空间std的或在代码中的某个地方使

因此,我尝试使用以下模板实现以下两个功能:

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

template <typename T>
T max(T a, T b, T c){
    return max( max(a, b), c);
}
上面的代码编译时没有错误

有人能解释一下吗

我哪里做错了?

有一个问题与你有冲突。您是否有使用命名空间std的
在代码中的某个地方使用std::max

使用不同数量的参数重载模板函数应该有效。

存在一个与之冲突的问题。您是否有使用命名空间std的
在代码中的某个地方使用std::max


用不同数量的参数重载模板函数应该有效。

既然已经有了
std::max
,为什么还要命名函数
max
?这很可能是你麻烦的原因。我意识到了我的错误。知道了!非常感谢。案例2起作用的原因是,如果模板和普通函数都能很好地匹配所有参数,那么非模板函数将在重载解决方案中获胜。对于这一点,有一个特定的限制规则。既然已经有了一个
std::max
,为什么还要命名函数
max
?这很可能是你麻烦的原因。我意识到了我的错误。知道了!非常感谢。案例2起作用的原因是,如果模板和普通函数都能很好地匹配所有参数,那么非模板函数将在重载解决方案中获胜。这有一个特定的打破僵局的规则。@manjula你去吧,把它拿出来,看看会发生什么,试着用std::cout
使用std::string
等缩小的
替换它。在代码中保持这种全局性不是很好的做法。@manjula也看到我意识到了我的错误。知道了!非常感谢。在实际代码中使用名称空间std(与小示例测试用例相反)是一个非常糟糕的主意。这在许多地方都会导致类似的问题。它被认为是非常糟糕的形式。@manjula你去吧,把它拿出来,看看会发生什么,试着用std::cout
使用std::string
等缩小的
替换它。在代码中保持这种全局性不是很好的做法。@manjula也看到我意识到了我的错误。知道了!非常感谢。在实际代码中使用名称空间std(与小示例测试用例相反)是一个非常糟糕的主意。这在许多地方都会导致类似的问题。这被认为是非常糟糕的形式。
templateEx.cpp:13:14: error: call to 'max' is ambiguous
        return max( max(a, b), c);
                    ^~~
templateEx.cpp:17:22: note: in instantiation of function template specialization
      'max<int>' requested here
        cout<<"2, 3, 4 : "<<max(2,3,4);
                            ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm:2654:1: note: 
      candidate function [with _Tp = int]
max(const _Tp& __a, const _Tp& __b)
^
templateEx.cpp:7:3: note: candidate function [with T = int]
T max(T a, T b){
  ^
1 error generated.
int max(int a, int b){
    return (a > b) ? a : b;
}

int max(int a, int b, int c){
    return max( max(a, b), c);
}