オーバーロードされたテンプレート関数があります:
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でそうなのですか?
これは、戻り値の型のオーバーロードのようなものですが、パラメーターの量が異なるテンプレートを使用しているため、少しおかしな印象を与えます。
—
ボーグリーダー
int
、typename RT
またはを指定していtypename T1
ますか?以来4
もありint
、それはどちらかである可能性があります。しない直接型と一致し、その2番目のオーバーロードが好ましいです。double
4
double