Re[3]: [MSVC] Инициализация членов класса
От: martin Беларусь  
Дата: 18.04.11 20:50
Оценка:
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, martin, Вы писали:


M>>Посмотри в сторону boost::base_from_member.


A>посмотрел и не понял что вы хотите предложить.


Насколько я понимаю, в вашем примере проблема в том что bar пытается использовать объект foo который еще не создан. Проблему конечно можно избежать поменяв местами объявления членов bar и foo класса Holder. Тогда все будет ок. Но в будущем нельзя гарантировать что кто-нибудь их опять не поменяет случайно местами. Самое правильное, на мой взгляд, это сделать гарантированный вызов конструктора foo перед вызовом конструктора bar. Этого можно добиться с использованием наследования.

struct HolderBase 
{
   Foo foo;
};

struct Holder : protected HolderBase
{
    Holder()
        : bar(foo)
    {}

    Bar bar;
};


Это конечно не совсем Base-from-Member, но близко к нему.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.