Каков хороший дизайн кода C ++ для одного объекта-шаблона -> архитектуры нескольких объектов-экземпляров? - PullRequest
2 голосов
/ 14 сентября 2010

У меня есть следующий запрос на разработку инструмента визуального редактирования, написанный на C ++:

  • уметь определять объект шаблона (назначать изображение, редактировать вращение / масштаб по умолчанию, редактировать значения свойств по умолчанию)
  • иметь возможность размещать экземпляры объекта шаблона в поле зрения
  • иметь возможность вносить изменения в объект шаблона (например, другое изображение, изменение поворота, масштабирование, значения свойств) для всех экземпляров, используя новые значения сразу или после нажатия «Применить»
  • Исключение: если вращение, масштабирование или какое-либо значение свойства было изменено (переопределено) в экземпляре, оно больше не должно брать это значение из своего шаблона!

Каковы хорошие варианты дизайна для реализации такого отношения шаблон-экземпляр в C ++ с дополнительным условием того, что экземпляры могут переопределять значения шаблона? Есть ли шаблон дизайна для этого?

Я выдвинул несколько идей, но ни одна не показалась мне подходящей. Например, у меня может быть класс TemplateObject и класс TemplateObjectInstance. Посредством отношения 1-ко-многим они «знают» друг друга, и, например, экземпляры могут проверять, переопределено ли свойство локально (существует запись в словаре свойств TemplateObjectInstance), и, если нет, пытается получить значение из своего родительского словаря свойств TemplateObject. вместо. Это решение, которое будет работать достаточно хорошо?

Примечание: этот вопрос , а не о шаблонах C ++.

1 Ответ

2 голосов
/ 14 сентября 2010

Я не понимаю, почему это должно быть сложно. Если нет дополнительных ограничений, вы не сообщите нам о ...

class RealItem;

class TemplateItem 
{
    //data members
public:
    //set properties and such
    RealItem MakeRealItem() const; //Generates a RealItem from this template.
};

class RealItem
{
    //etc...
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...