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

Когда я называю foo с помощью экземпляра MyClass с A объекта по неизвестной причине foo метод MyClass называется вместо foo класса MyTmp. Я использую gcc 4.4.2 с использованием -O3. Какие-нибудь советы?

+0

Что вы имеете в виду, что вызывает 'метод Foo' из' MyClass'? Вы имеете в виду ... код не компилируется? «A» не является «B». – Barry

+0

@Barry Нет кода компилируется, но во время выполнения вызывается неправильный метод. Это действительно странно. Однако после применения решения TartanLlama сейчас работает программа. – greywolf82

ответ

7

Функция-член в производных классах с теми же именами, что и в базовых классах скрыть функции в базовом классе.

Если вы хотите MyTmp<T>::foo быть доступны из MyClass, вы могли бы, как с помощью директивы:

class MyClass: public MyTmp<Other> { 
public: 
    using MyTmp::foo; 
    void foo(const B& b); 
} 
Смежные вопросы