Искам да внедря чистите виртуални методи от интерфейс, използвайки имплементацията, предоставена от конкретен клас, без да се налага изрично да извиквам метода от конкретния клас. Пример:
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