과부하 된 템플릿 기능이 있습니다 :
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
하지 않는 직접 유형과 일치double
두 번째 오버로드가 바람직 있도록.