Я хочу реализовать чисто виртуальные методы из интерфейса, используя реализацию, предоставляемую конкретным классом, без необходимости явного вызова метода из конкретного класса. Пример:
class InterfaceA{
public:
virtual void foo() = 0;
};
class InterfaceB:public InterfaceA{
public:
virtual void bar() = 0;
};
class ConcreteA : public InterfaceA{
public:
virtual void foo(){}//implements foo() from interface
};
class ConcreteAB: public InterfaceB, public ConcreteA{
public:
virtual void bar(){}//implements bar() from interface
};
В этом сценарии компилятор запрашивает реализацию foo() в классе ConcreteAB, потому что в InterfaceB она не реализована и унаследована от InterfaceA.
Есть способ указать компилятору использовать реализацию из ConcreteA без использования оболочки, вызывающей ConcreteA::foo()?
;
, которого вам не хватает, это отлично скомпилируется на g++ 4.5. Можете ли вы показать нам реальный код, который вызывает проблему? - person Mark B   schedule 26.12.2012InterfaceB
вообще ребенокInterfaceA
? Мне кажется, это дизайнерский запах. - person Mark B   schedule 26.12.2012