Информация об изменениях

Сообщение Re[2]: как лучше сделать от 27.02.2020 9:55

Изменено 27.02.2020 10:31 rg45

Re[2]: как лучше сделать
Здравствуйте, Erop, Вы писали:

E>2) Если же всё-таки нужны именно методы getOption setOption (например, есть какие-то версии доп. параметров для некоторых объектов и мы пробуем применять то одни, то другие), то можно пойти по python/smalltalk-style пути и передавать либо имя/ID доп. опции в методы getOption setOption БАЗЫ

E>либо std::map<std::string, int>
E>Но неудобно то, что динамики многовато для С++ и то, что если в разных классах понадобятся разные типы, то будет неудобно.
E>Хотя разные типы обеспечить более или менее можно

E>3) Завести структуру/класс ExtraOptions с виртуальным деструктором. Для тех классов, кому надо, выводить из неё расширенные версии.

E>В метод setOption передавать ссылку на такую структуру, а в методе класса dyn_cast'ом кастить вниз и получать доступ туда, куда нужно
E>А из getOption сразу возвращать выведенную структуру.

Ну вот я бы воздержался от таких мер, не будучи уверенным, что они действидешьно нужны. И даже если бы с толкнулся с тем, что метода getOption и setOption действительно нужны, в первую очередь посмотрел бы, а нельзя ли изменить дизаайн верхнего уровня так, чтобы необходимость в этих методах исчезла. Чем проще инварианты, тем надежнее программа и проще поддержка.
Re[2]: как лучше сделать
Здравствуйте, Erop, Вы писали:

E>2) Если же всё-таки нужны именно методы getOption setOption (например, есть какие-то версии доп. параметров для некоторых объектов и мы пробуем применять то одни, то другие), то можно пойти по python/smalltalk-style пути и передавать либо имя/ID доп. опции в методы getOption setOption БАЗЫ

E>либо std::map<std::string, int>
E>Но неудобно то, что динамики многовато для С++ и то, что если в разных классах понадобятся разные типы, то будет неудобно.
E>Хотя разные типы обеспечить более или менее можно

E>3) Завести структуру/класс ExtraOptions с виртуальным деструктором. Для тех классов, кому надо, выводить из неё расширенные версии.

E>В метод setOption передавать ссылку на такую структуру, а в методе класса dyn_cast'ом кастить вниз и получать доступ туда, куда нужно
E>А из getOption сразу возвращать выведенную структуру.

Ну вот я бы воздержался от таких мер, не будучи уверенным, что они действидешьно нужны. И даже если бы столкнулся с тем, что методы getOption и setOption действительно нужны, в первую очередь посмотрел бы, а нельзя ли изменить дизаайн верхнего уровня так, чтобы необходимость в этих методах исчезла. Чем проще инварианты, тем надежнее программа и проще поддержка.