Лучший способ создать объект Environment в C ++ - PullRequest
2 голосов
/ 12 октября 2009

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

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

Ответы [ 5 ]

4 голосов
/ 12 октября 2009

Объект Singleton не всегда является решением. Хотя иногда это кажется простым решением, у него есть некоторые недостатки (см., Например, этот вопрос ).

Сколько ваших классов действительно нуждается в доступе к этому объекту Environment? Если вы буквально имели в виду, что каждый урок, который у вас есть, звучит так, как будто ваш дизайн имеет недостатки.

Часто лучшая альтернатива синглтону - просто передать объект тем, кто в нем действительно нуждается.

0 голосов
/ 12 октября 2009

Как уже указывалось, вы ищете шаблон Singleton. Тем не менее, шаблон Singleton часто является результатом плохого дизайна. Всякий раз, когда вы обнаруживаете, что используете шаблон Singleton или, в этом отношении, любой шаблон, который требует, по сути, глобальных переменных, вам следует подумать о том, может ли быть лучший подход к проблеме. Что касается вашей конкретной проблемы, я рекомендую вам взглянуть на класс QSettings , который является частью Qt Framework , бесплатной и высококачественной библиотеки с открытым исходным кодом.

Класс QSetttings позволит вам загружать / сохранять параметры конфигурации, используя предпочтительный собственный механизм (реестр в Windows, файл списка свойств в Mac OS X и XML-файл gconf в Linux). Кроме того, вы можете захотеть увидеть мой пост Переменные окружения злые , на случай, если вы рассматриваете возможность использования переменных окружения для конфигурации (название «среда» для конфигурации звучит ужасно зловеще).

0 голосов
/ 12 октября 2009

Звучит так, будто вы хотите шаблон синглтона. Это позволит вам создавать и использовать один объект / экземпляр класса, но не более, даже если вы обращаетесь к нему много раз. См:

http://www.infernodevelopment.com/singleton-c

0 голосов
/ 12 октября 2009

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

0 голосов
/ 12 октября 2009

Что вам нужно сделать, это обернуть ваш класс среды в шаблон Singleton. См. Этот вопрос для получения дополнительной информации: C ++ Singleton design Pattern

...