Здравствуйте, 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, но близко к нему.