আমার একটি অতিরিক্ত লোড টেম্পলেট ফাংশন রয়েছে:
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
আপনি কি নির্দিষ্ট করছেনtypename RT
বাtypename T1
? যেহেতু4
এটিও একটিint
, এটিও হতে পারে। সঙ্গেdouble
,4
না সরাসরি টাইপ মেলেdouble
, তাই দ্বিতীয় জমিদার পছন্দ করা হয়।