我有以下代碼:C++靜態成員函數具有繼承重載
struct CommonVariables
{/*some common variables that need to be proceed*/};
struct CommonHandler
{
static void foo(const CommonVariables& vars) {/*processed vars*/}
void bar(const CommonVariables& vars) {/*processed vars*/}
};
struct AnotherVariables
{/*another variables*/};
struct AnotherHandler
{
static void foo(const AnotherVariables& vars) {/*processed vars*/}
void bar(const AnotherVariables& vars) {/*processed vars*/}
};
struct Derived : CommonHandler, AnotherHandler
{};
當我嘗試調用派生:: foo的(/ 任何變量類型 /)或衍生d; d.bar(/ 任何變量類型 /),編譯器給我一個錯誤:「引用'foo(或bar)'是不明確的」。
然而,下面我幾乎同樣的情況:
struct DifferentHandler
{
static void foo(const CommonVariables& vars) {}
static void foo(const AnotherVariables& vars) {}
void bar(const AnotherVariables& vars) {}
void bar(const CommonVariables& vars) {}
};
,並呼籲DifferentHandler :: foo的(/ 任何變量類型 /)或 '酒吧' 工作得很好。
有很多解決方案可以解決第一個代碼塊(template traits等)的問題。我特別想要的是通過繼承來重載方法。我不明白爲什麼來自Derived的調用是模棱兩可的(因爲輸入參數有不同的類型,從編譯器的角度來看這些函數是不同的,就像在DifferentHandler中一樣)
注意:我試過MinGW5.8(在Qt Creator)以及VS2015中的MSVC2015。兩個編譯器都會產生相同的錯誤
重複:http://stackoverflow.com/questions/5365689/c-overload-static-function-with-non-static-function我不知道如何或沒有特權標記爲這樣。 –
@ChristopherPisz,這是你鏈接的帖子的副本?我沒有看到相似之處。 – SergeyA
這個問題爲什麼downvoted?什麼人不喜歡它? – SergeyA