2015-08-11 3 views
0

У меня есть объект, который выглядит какнужно много параметров на строительство C++ 03

class Block{ 
    Type1 member1; 
    Type2 member2; 
    Type3 member3; 
    ... 
    //many many MANY members (hundreds, if not thousands) 
} 

Мне нужно создать удобный способ построения блока.

Это вызывает шаблон строителя, но, как показано здесь https://en.wikipedia.org/wiki/Builder_pattern , похоже, я превысил бы максимальное количество параметров, разрешенных конструктором.

Как мне это сделать? Разделение на более мелкие блоки - это вариант, который я бы предпочел избежать.

Благодаря

+0

** Почему ** вы хотите избежать создания небольших блоков? – Jarod42

+0

Вы должны сгруппировать членов, которые тесно связаны друг с другом. – jxh

+0

Я хочу избежать меньших блоков, потому что более крупный блок - это какой-то старый код, на который я не собираюсь входить. Более того, «члены» являются глобальными переменными, неорганизованными, негрупповыми и едва ли названными. – Gulzar

ответ

0

Там должно быть дизайн вопрос здесь, я не думаю, что вы действительно использовали член сотни. класс должен быть прост, тем лучше. Вы должны предоставить более подробную информацию об этом классе.

0

Я не думаю, что вы собираете шаблон строителя. Определите объект конфигурации. Определите отдельные методы для настройки объекта конфигурации. Затем используйте объект конфигурации для создания объекта.

class BlockCfg { 
    //... 
    void setMember1 (Type1 val); 
    void setMember2 (Type2 val); 
    //... 
}; 

class Block { 
    Block (const BlockCfg &cfg); 
}; 
+0

Что делать, если мне нужно, чтобы мой блок настраивался STATICALLY? – Gulzar

+0

Определите способ статического создания 'BlockCfg'. – jxh

+0

Это возвращает нас к той же проблеме параметров, я чего-то не хватает? – Gulzar

0

Вы могли бы сделать BlockBuilderfriend из Block, то имеют BlockBuilder функции непосредственно изменять данные участников, а не передавая все данные в конструктор. Недостатком этого является то, что все члены Block будут построены по умолчанию, что может быть хорошо, если большинство типов встроены, но могут быть дорогими.

Однако, имея сотни членов в классе, это массивный запах кода, и вы должны подумать о редизайне.