我有一个带参数的函数。有时它是一个“原始”数字,有时它是一个包含在包含有关数字的一些元信息的持有者类中的数字。我可以像这样区分这两种情况
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>();
或f1<Holder<int>>();
导致error: ambiguous call to overloaded function
在不更改函数名称的情况下这可能吗?(如果不是,这没什么大不了的,我只是好奇)