в своем движке применяю такую технику - объекты (движОк, текстура, окно, шрифт) создаются не через параметры, например:
Texture *tex = eng->LoadTexture("somefile.jpg",TF_ANISOTROPIC,TBM_ADD)
или
Font *fnt = eng->LoadFont("Times New Roman",14,FF_BOLD,FM_TEXCASH)
а черех описатели (Descriptors)
Texture * tex = eng->LoadTexture(TextureDesc("somefile.jpg").blend(TBM_ADD));
или
Font *fnt = eng->LoadFont(FontDesc("Times New Roman").bold(1));
минусы техники:
* обычно - больше букаф
* дополнительный класс на объект
плюсы техники:
* в сочетании с патерном
мост облегчает несколько сопровождение кода при добавлении нового параметра (не нужно менять список параметров конструктора(ов) в IObject.h, CObject.h и CObject.cpp)
* можно хранить дескриптор в объекте и пользоваться фишками типа:
Font *newfont = eng->LoadFont(oldfont->GetDescriptor().bold(0));
- не знаю что за шрифт oldfont, но хаачу такой же - только нежирным чтобы был.
* можно пользоваться чем-то вроде именованных параметров, при грамотном определении умолчаний можно существенно сократить количество вводимых параметров.
* можно использовать "специальные" конструкторы. например для текстуры size(int) будет задавать одновременно и ширину и высоту (и глубину, если текса трехмерная)
* инвариант параметров. например ширина окна не может быть больше ширины дисплея, если только окно не фейковое. Правда его прийдется в конструкторе класса один фиг проверять снова, так как члены данных придется делать открытыми, чтобы конструкторы объектов имели к ним доступ. ненадежно.