パラメータを取る関数があります。「生の」数値の場合もあれば、数値に関するメタ情報を含むホルダー クラスにラップされた数値の場合もあります。このような2つのケースを区別できます
template<class T>
struct Holder
{
};
template<class T>
void f1(T)
{
}
template<class T>
void f1(Holder<T>)
{
}
ただし、ユーザーが何を望んでいるかに応じて、生の番号または所有者のいずれかを返したいと考えています。関数を呼び出すときに、ユーザーがテンプレート パラメーターを明示的に指定する必要があることはわかっています。それでいいのですが、できれば同じ名前の関数が欲しいです。このようなもの
template<class T>
T f1()
{
return T();
}
template<class T>
Holder<T> f1()
{
return T();
}
f1<int>();
ただし、それをorとして呼び出すとf1<Holder<int>>();
、error: ambiguous call to overloaded function
関数名を変更せずにこれは可能ですか?(そうでなければ大したことではありません、ただ気になるだけです)