Будет ли этот код множественного наследования работать со всем компилятором?

У меня есть этот код, который отлично работает при компиляции с 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 сам по себе?

Я пытаюсь избежать виртуального наследования за счет дополнительного определения функции, и моя главная задача - подтвердить, будет ли это работать со всеми компиляторами?

0 ответов

Другие вопросы по тегам