LINUX.ORG.RU

насколько целесообразно уклоняться от создания глобальных объектов?

 ,


1

5

Мне нужно уйти от static-only класса и меня смущает количество мест, куда нужно пробросить указатель на объект.

известно, что объект будет создан только в одном экземпляре и будет использоваться в половине сырцов.

★★★★★

Последнее исправление: post-factum (всего исправлений: 6)
Ответ на: комментарий от cvv

Logger - посмотри, как сделан log4cxx, например. В двух словах: в main делаешь init, а запись в лог через статические методы. Config - создается локальный экзепляр в main, а дальше в конструкторы объектов передаются нужные настройки, а не весь конфиг-файл. UI - честно, не понял, зачем он синглтоном у тебя. По сути это куча классов же. Да, этот момент не очень понял.

kulti ★★
()
Ответ на: комментарий от cvv

С конфигом я поступаю так: в одном месте читаю весь конфиг в память, дальше паршу парсю короче определяю какие опции к какому классу относятся и передаю мапу<ИмяПараметра, Значение> в конструктор соответсвующего класса. Конфиг имеет древовидную структуру. Передается вся ветка целиком, включая параметры детей, вновь созданный класс передаст параметры детей в их конструктора и т.д. Т.е. определение настроек хоть и расползлось по всему проекту, но каждый читает и понимает только свои параметры, что считаю в целом вИном.

anonymous
()
Ответ на: комментарий от kulti

UI - честно, не понял, зачем он синглтоном у тебя. По сути это куча классов же. Да, этот момент не очень понял.

мне нужна поддержка нескольких взаимозаменяемых пользовательских интерфесов поэтому я создал базовый класс UI и указателю на базовый класс присвоил реализацию в виде обьекта-потомка и таким образом всех удовлетворил.

cvv ★★★★★
() автор топика
Ответ на: комментарий от vertexua

видимо после появления стандартного RTTI там, и сборки мусора, т.е. когда C++ превратиться в D

а то представь выстрел в ногу по сишному:

delete Application::instance()
Deleted
()
Ответ на: комментарий от cvv

Ага, ясно. Т.е. у этого класса статические методы CreateUiFromPetrov(), CreateCoolStarWarsUi() etc? В этом случае, я думаю, статик-онли класс вполне себе нормально. Вообще, имхо, если есть группы функций, которые можно сгруппировать в namespace, то лучше сгруппировать их в статик-онли класс.

kulti ★★
()
Ответ на: комментарий от kulti

нет, я создал один статический метод NEW() и сую ему argc и argv чтобы он создал и вернул обьек соответсвующего дочернего класа. выбор дочернего класа предполагается средствами комманд-лайна.

cvv ★★★★★
() автор топика
Ответ на: комментарий от trex6

Se la vi.

Это вы написали дабы неграмотность свою показать? У вас получилось. ;-) C'est la vie.

anonymous
()

Ответом на этот воспрос будет FAQ в начале вводного курса по какому-нибудь IoC фреймворку типа Spring.

Absurd ★★★
()
Ответ на: комментарий от kulti

мы друг друга не понимаем. Я делаю гдето так:

int main(int argc, char*argv[])
{
    UI* ui = UI::NEW(&argc, &argv);

    /*...*/
}

А дальше пробрасую ui везде где только нужно.

cvv ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.