我有一个重载的模板功能:
template<typename T1, typename T2>
auto overMax(T1 a, T2 b)
{
std::cout << __FUNCSIG__ << std::endl;
return b < a ? a : b;
}
template<typename RT, typename T1, typename T2>
RT overMax(T1 a, T2 b)
{
std::cout << __FUNCSIG__ << std::endl;
return b < a ? a : b;
}
如果我这样称呼它:
auto a = overMax(4, 7.2); // uses first template
auto b = overMax<double>(4, 7.2); // uses second template
一切正常,但是
auto c = overMax<int>(4, 7.2); // error
导致通话不明确。
为什么对int如此,然后可以确定其他类型呢?
这对我来说似乎有点狡猾,因为您在返回类型上有点重载,但是使用的模板具有不同数量的参数。
—
Borgleader
int
,您指定typename RT
还是typename T1
?由于4
也是int
,也可以是。使用double
,4
不直接匹配typedouble
,因此首选第二个重载。