2016-02-04 113 views
3

我有以下類:重載方法與模板

class A: public Util<double> {} 

class B: public Util<double>, public Interface {} 

template<class T> 
class MyTmp { 
public: 
    void foo(const A& a); 
} 


class MyClass: public MyTmp<Other> { 
public: 
    void foo(const B& b); 
} 

當我使用的MyClass的實例與A對象不明原因的MyClassfoo方法被調用,而不是類的foo調用fooMyTmp。我使用-O3使用gcc 4.4.2。有小費嗎?

+0

你是什麼意思它調用'MyClass'的'foo'方法?你的意思是......代碼不能編譯? A'不是'B'。 – Barry

+0

@Barry沒有代碼編譯,但在運行時調用了錯誤的方法。這真的很奇怪。然而,在應用TartanLlama的解決方案之後,該程序現在可以運行。 – greywolf82

回答

7

派生類中的成員函數名稱與基類中的名稱相同hide基類中的函數。

如果你想MyTmp<T>::foo,可購自MyClass,你可以作爲一個using指令:

class MyClass: public MyTmp<Other> { 
public: 
    using MyTmp::foo; 
    void foo(const B& b); 
}