【发布时间】:2013-09-16 16:05:35
【问题描述】:
我有一个带参数的函数。有时它是一个“原始”数字,有时它是一个包含在包含有关数字的一些元信息的持有者类中的数字。我可以像这样区分这两种情况
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
是否可以在不更改函数名称的情况下做到这一点? (如果没有,也没什么大不了的,我只是好奇)
【问题讨论】:
-
不,这是不可能的。您不能仅在返回类型上重载函数。
-
不是骗子,因为我们在这里讨论的是模板。
标签: c++