2016-02-04 73 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); 
}