为什么函数不能被返回类型重载?

nak*_*iya 8 c++ types overloading return

可能重复:
返回类型的函数重载?
拼图:根据返回值重载C++函数

因为我有一个库,它以下列形式公开了一堆函数:

bool GetVal();
double GetVal();
int GetVal();
long GetVal();
//So on.
Run Code Online (Sandbox Code Playgroud)

现在我必须包装这些.我宁愿不再重写同一组函数.我想做点什么

template<class T>
T GetVal(){}
Run Code Online (Sandbox Code Playgroud)

但我似乎无法让这个工作.有任何想法吗?

Chu*_*dad 18

您不能在返回类型上重载,因为在函数调用表达式中使用函数的返回值不是必需的.

例如,我可以说

GetVal();
Run Code Online (Sandbox Code Playgroud)

编译器现在做了什么?

  • 编译器只能发出"不明确的返回类型"消息并拒绝编译.这本身就不足以说明理由. (6认同)
  • 我认为有一件事是语言根本不允许,另一件事就是为什么不呢."编译器现在做了什么?" - 它可能会发出错误,这将是一件好事,因为不使用(或明确忽略)结果可能是一个逻辑错误.至于卡尔的"现在怎么样?" - 完全相同的推理也可以应用于参数的重载:`void f(double); void f(float); f(10);"现在怎样?".这不是超载的前提,它必须是无歧义的. - 此外,如果你查看链接的问题,可以在C++中模拟返回类型*上的重载. (5认同)
  • ... 这才是重点. (2认同)