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

时间:2010-12-02 04:59:05

标签: c++ types return overloading

  

可能重复:
  Function overloading by return type?
  Puzzle: Overload a C++ function according to the return value

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

bool GetVal();
double GetVal();
int GetVal();
long GetVal();
//So on.

现在我必须包装这些。我宁愿不再重写同一组函数。我想做一些像

这样的事情
template<class T>
T GetVal(){}

但我似乎无法让这个工作。有什么想法吗?

5 个答案:

答案 0 :(得分:18)

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

例如,我可以说

GetVal();

编译器现在做了什么?

答案 1 :(得分:2)

函数的返回类型不是由编译器生成的用于唯一标识每个函数的错位名称的一部分。以下各项:

  • 参数数量
  • 参数类型
  • 参数序列

是用于为每个函数生成唯一的受损名称的参数。正是基于这些独特的错位名称,即使名称相同(重载),编译器也可以理解调用哪个函数。

答案 2 :(得分:0)

你可以尝试

  1. template <typename T> T GetVal(T) {...}代替(使用虚拟变量执行解析)
  2. 使用类型转换
  3. 或者只使用简单化的GetValBool等。

答案 3 :(得分:0)

C ++中只有一个函数可以通过返回类型重载,隐式转换运算符特殊函数名为operator T()T变化)。

答案 4 :(得分:0)

不,您不能根据返回类型重载。

来自标准文档。,Sec 13.1.2

  

- 不能仅在返回类型上有所不同的函数声明。

关于你的库,每个函数可能属于不同的命名空间,否则也不可能。