Tôi có một chức năng mẫu quá tải:
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;
}
Nếu tôi gọi nó như thế này:
auto a = overMax(4, 7.2); // uses first template
auto b = overMax<double>(4, 7.2); // uses second template
mọi thứ hoạt động hoàn hảo, nhưng
auto c = overMax<int>(4, 7.2); // error
gây ra cuộc gọi mơ hồ.
Tại sao nó lại như vậy với int , và OK loại nào khác?
int, bạn đang chỉ địnhtypename RThaytypename T1? Vì4cũng là mộtint, nó có thể là một trong hai. Vớidouble,4không khớp trực tiếp với loạidouble, do đó, quá tải thứ hai được ưu tiên.