Aşırı yüklenmiş bir şablon işlevi var:
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;
}
Eğer böyle çağırırsam:
auto a = overMax(4, 7.2); // uses first template
auto b = overMax<double>(4, 7.2); // uses second template
her şey mükemmel çalışıyor, ama
auto c = overMax<int>(4, 7.2); // error
belirsiz çağrıya neden olur.
Neden int ve OK ile diğer türlerde böyle?
int
,typename RT
veya belirtiyortypename T1
musunuz? Yana4
da olduğuint
, ya olabilir. İledouble
,4
gelmez doğrudan türüyle eşleşmesidouble
ikinci aşırı yük tercih edilir, böylece.