Я в настоящее время сталкивается следующий сценарий:переменная член Force быть построено базового класса
class foo
{
public:
foo (/* some parameters */);
};
class bar
{
public:
bar (foo & f);
};
// both foo and bar are 3rd party
class base
{
public:
base (foo & f) : m_bar (f) {}
private:
bar m_bar;
};
class derived : public base
{
public:
derived (foo & f) : base (f) {}
};
class derived2 : public base
{
public:
derived2() : base (/* well ... */) {}
private:
foo m_foo;
};
Как вы можете видеть, foo
и bar
были предназначены для использования, как это:
foo f (/* some parameters */);
bar b (f);
Тем не менее, я хочу, чтобы мои классы-оболочки были автономными, если необходимо, и derived2
должен быть. Но, derived2::m_foo
не может быть просто передан base
, а его неинициализирован.
Так что мой вопрос: есть ли способ заставить derived2::m_foo
построить до base
?
Единственное решение, которое я придумал себе это:
class derived2_foo
{
protected:
foo m_foo;
};
class derived2 : public base, public derived2_foo
{
public:
derived2() : derived2_foo(), base (m_foo) {}
};
Какой должен быть правильный код (я свободен быть опровергнуты), но я не совсем уверен, что если я хочу, как это решение. Поэтому я здесь, чтобы ловить рыбу для других идей.
Хм .. вы не должны изменять вопрос, чтобы включить ответ. Будущие читатели вопроса + ответа будут смущены тем фактом, что я, кажется, ответил на то, что вы уже знали. –
@ChristianHackl Извините, не знал этого. И не знаю, как вернуть изменения.Но ваш аргумент также относится к первой версии вашего ответа, которая просто устанавливает 'производный2_foo' в' private', что могло быть сделано в комментарии. Мой вопрос касается других идей, кроме моих. Во всяком случае, я дважды отредактирую свой вопрос – andyb
Не большое дело. Просто имейте в виду, что главная цель SO заключается в создании огромной базы знаний Q/A. Возможно, ваш вопрос также лучше подходит для codereview.stackexchange.com; в конце концов, похоже, у вас уже есть рабочее решение, но не уверен, что он хороший. –