Re[3]: О виртуальном наследовании
От: dupamid Россия  
Дата: 09.09.02 13:26
Оценка:
Здравствуйте Amor, Вы писали:

A>Не понял!

A>1) "Виртуальные базовые подобъекты" — в моем случае это класс А?

Да.

A>2) Какой смысл этого смещения?

A>Вообщем хотелось бы пояснее, пожалуйста. В итоге я хочу понять как из всей этой лабуды какой нибудь далекий потомок понимает, что экземпляр класса А надо создать в единственном экземпляре (в случае множественного наследования)?

Вот на псевдокоде реализация того, о чем я говорил.

// class A
// {
// public:
//    int i;
// };
struct _A
{
    int i;
};

struct _B_vbtable
{
    unsigned offset[1];
};

// class B : public virtual A
// {
// public:
//    int j
// }; 
struct _B
{
    _B_vbtable* _vbtable;
    _A _a;
    int j;
};

_B_vbtable vbtable_for_B = { offsetof(_B, _a) };

void _B_ctor(_B* p)
{
    p->_vbtable = &vbtable_for_B;
}

int main()
{
    // B b;
    _B b;
    _B_ctor(&b);

    // b.i = 0;    
    ((_A*)((char*)(&b) + b._vbtable->offset[0]))->i = 0;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.