関数テンプレートがあります:
//the most generalized template
template<typename typeArg, typename typeRet>
typeRet func(const typeArg &val);
およびそのためのいくつかの特殊化は、次のようになります。
template<>
someType func(const otherType &val)
{
//code
}
template<>
typeFoo func(const typeBar &val)
{
//more code
}
ただし、デフォルトの実装はありません。
明らかに、両方のタイプを自動的に推測することはできないため、呼び出しは次のようになります。
type1 var1 = func<argType,type1>(arg);
型が同一の場合にのみ、デフォルトの実装を記述する適切な方法は何ですか?
私はいくつかの変種を試しました:
1 回目の試行
template<typename theOnlyType, theOnlyType>
theOnlyType func(const typeArg &theOnlyType)
{
//code
}
しかし、この関数にはテンプレート パラメーターが 1 つしかなく、上記の呼び出しに対応していないため、これは誤りです。
2回目の試行
template<typename type1, typename type2>
type1 func(const type1 &theOnlyType)
{
//code
}
呼び出しがあいまいになり、候補はこの関数と、コードの最初のブロックからの最も一般化されたテンプレートです。