class Example
{
private:
ExtremelyHeavyObject obj;
public:
Example():
obj
(
ExtremelyHeavyObjectBuilder builder;
builder.method1();
builder.method2();
builder.method3();
/* Some code here */
return builder.build(); // Assign to obj builder.build() result
)
{}
};
ExtremelyHeavyObject obj *
не хотелось бы рассматривать, так как оно бы потребовало доп. аллокаций/деаллокаций а также лишний индирект
Сегодня использование англиканизмов в профессиональной среде трактуется как признак низкой квалификации. Квалифицированный специалист способен объясняться исключительно терминами родного языка.
Индирект - косвенность. Statement'ы - выражения.
Когда человек сыпет тяжелыми на слух англиканизмами, его становится тяжело понять. Это заставляет слушателя напрягаться и нервничать. А это уже ведет к обострению общения и может быть воспринято как неуважение.
По поводу стиля кода. Оформление, откровенно говоря, рваное. Это точно так же заставляет задумываться, вчитываться и искать. Думаю, поэтому у тебя пока еще нет ответов. Лично мне потребовалось 4 раза перечитать код чтобы увидеть в нем инициализатор. Первые три раза я видел просто неправильный синтаксис. В широкой практике инициализатор оформляется примерно схожим образом: блоком по строкам. Посмотри пример.
Example():
и до тела конструктора - вообще псевдо код, предположительный синтаксис, который бы подошёл. Наверное, нужно было это указать statement, indirect - это как раз те англицизмы, переведя которые на русский одним словом, только ухудшит понимание, поэтому я бы не стал это делать
То что вы предлагаете (объявление builder и прочее), можно вынести в вышестоящий код, который будет создавать экземпляр Example, и в конструктор Example передавать результат builder.build(), в списке инициализации просто передадите параметр конструктора Example в параметр конструктора obj.
Example()
: obj(createObj())
{}
floppa322, Если это статический метод Example/ExtremelyHeavyObjectBuilder/ExtremelyHeavyObject, то можете так делать.
В случае статического метода ExtremelyHeavyObjectBuilder/ExtremelyHeavyObject требуется указать класс, т.е. будет что-то вроде ExtremelyHeavyObjectBuilder::createObj().
Так же createObj может быть и свободной функцией.
statement, indirect - это как раз те англицизмы, переведя которые на русский одним словом, только ухудшит понимание, поэтому я бы не стал это делать
естественно может, просто предпочитаю в ооп-стиле писать )
class Example
{
private:
ExtremelyHeavyObject obj;
public:
Example()
: obj{ ExtremelyHeavyObjectBuilder{}
.method1()
.method2()
.method3()
.build() }
{
}
};