2014-03-06 16 views
0

我有一个C++类,我已经超负荷内部限定一对纯虚函数过载。 代码段如下::功能与“uint32_t的”&uint64_t中”在纯虚函数在C++中唯一的变化

virtual uint64_t Abc::GetValue()=0; 
virtual uint32_t Abc::GetValue()=0; 

这里,在功能上签名,唯一的区别是GETVAL()“uint32_t” &“uint64_t”的返回类型..

它抛出编译错误,这不能超载。

Plz帮助我解决这个问题。

+0

所以,如果你做'abc.GetValue()',它应该调用哪一个? –

+0

只有在返回类型中,关于差异的整个事情并不会造成超负荷......是的,那就是现在正在咬你。 – WhozCraig

+0

[通过返回类型重载函数?]的可能重复(http://stackoverflow.com/questions/442026/function-overloading-by-return-type) – ecatmur

回答

3

您不能基于返回类型进行重载,只能根据参数类型进行重载。这是因为根据调用函数的方式来选择超载,并且函数调用没有指定期望的返回类型。

选项包括:

  • 提供的功能不同的名字;
  • 通过参考参数而不是返回值“返回”该值;
  • 为每个版本添加一个虚拟参数,以指定返回类型;
  • 返回可转换为任一类型的“代理”对象(尽管这意味着您只有一个函数,因此派生类不能单独覆盖这两个版本)。
1

在C++ onverloading上只做参数的功能不在返回类型。所以你重新定义了一个错误的功能。