Re[2]: Получить неявно ссылку на объект контейнер
От: xander.od  
Дата: 24.08.06 20:49
Оценка:
Здравствуйте, remark, Вы писали:

А>> Интересует, существует ли возможность как-нибудь ЭЛЕГАНТНО и без сложных извратов получить в поле какого-нить класса ссылку на объект который содержит это поле. Другими словами:

R>Можно, если не забыли откуда ноги растут:

А>>

R>class Base
R>{
R>public:
R>    Base* parent;
R>};

R>class A : public Base
R>{
R>};

R>class B : public Base
R>{
R>public:
R>    A member1;
R>    A member2;
R>    A member3;
R>    //...
R>    A memberN;

R>    B()
R>    {
R>        std::fill_n((Base**)this, sizeof(*this)/sizeof(Base*), (Base*)this);
R>    }
R>};

R>


R>Ну а если серьёзно. Разьве просто передать указатель это не "ЭЛЕГАНТНО и без сложных извратов"? Я уверяю, что любое другое решение будет более сложным.


Всё это элегантно работает пока пока в объекте-контейнере только объекты производные от Base. Как я понмаю, при появлении объекта элементарного типа int, float или виртуальной ф-ии, описанная конструкция перестаёт работать. В Страуструпе есть приятный пример создания списка объектов производных от базового:


class Base {
   Base* next;
   static Base * list;
public:
   Base()
   {
       next = list;
       list = this;
   }
};

кажись так...
...таким образом можно в любой момент "пройтись" по всем объектам производным от Base. А вот было бы шикарно если бы можно было бы каким-нить образом сохранить дерево объектов...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.