2014-03-06 47 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上只做參數的功能不在返回類型。所以你重新定義了一個錯誤的功能。