<分区>
我有一个接受参数的函数。有时它是一个“原始”数字,有时它是一个包装在持有人类中的数字,其中包含一些关于数字的元信息。我可以像这样区分这两种情况
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
这是否可以在不更改函数名称的情况下实现? (如果不是,也没什么大不了的,我只是好奇)