Будет ли этот код множественного наследования работать со всем компилятором?
У меня есть этот код, который отлично работает при компиляции с Visual Studio.
#include "stdafx.h"
class base
{
public:
virtual void FOO() = 0;
};
class D1:public base
{
public:
virtual void bar() =0;
};
class D2:public base
{
public:
virtual void moo() =0;
};
class Impl: public D1, public D2
{
public:
virtual void FOO()
{}
virtual void bar()
{}
virtual void moo()
{}
};
int _tmain(int argc, _TCHAR* argv[])
{
Impl* p = new Impl();
p->bar();
p->FOO();
base *b = (D1*)p;
b->FOO();
return 0;
}
Вы можете видеть, что здесь есть проблема с алмазом, но я все еще могу создать объект Impl
только с одним определением FOO
, Я думал, что мне понадобится множественное определение из базовых классов. Может кто-нибудь объяснить, сколько vtables будет создано здесь, и компилятор создаст несколько определений FOO
сам по себе?
Я пытаюсь избежать виртуального наследования за счет дополнительного определения функции, и моя главная задача - подтвердить, будет ли это работать со всеми компиляторами?