2015-01-30 3 views
0

Я пишу текстовую игру, доступную через TELNET для собственного развлечения на C++. Я создал иерархию классов, основанную на игровых аспектах/компонентах, таких как транспортные средства, пешеходы, игроки, транспортные средства, велосипеды и т. Д.Загрузка игровых данных в пул без глобальных координат

Я думаю о реализации объекта «Пул», который будет хранить указатели для определенных загруженных элементов. Я думаю об использовании функции Add() в пуле, которая будет перегружена на основе класса элемента, который я хотел бы добавить в пул. Проблема заключается в следующем: предположим, что я хочу, чтобы этот пул элементов (или некоторый слой поверх него) был доступен все время. Возможно, мне нужна функция GetAllVehicles() (просто быстрый пример), который будет просматривать данные пула и возвращать мне все транспортные средства в массиве с кучей указателей.

Дело в том, что если я захочу пройти через этот пул где-нибудь в своем коде. По сути, объект Pool должен быть глобальным в некотором смысле, потому что вы хотите получить доступ к загруженным игровым элементам повсюду без необходимости передавать созданный объект навечно. Однако я не хочу, чтобы он загрязнял глобальное пространство имен, и я хочу многопоточность, поэтому объявление глобальной переменной было бы особенно плохой идеей.

Вопрос прост: что мне делать, чтобы сделать эту работу?

+0

Будет ли пул (и объекты в этом бассейне) неизменными? Если это так (или если вы можете сделать их так, например, установив их при запуске и обещая никогда не изменять их впоследствии), тогда доступ только для чтения из нескольких потоков не будет проблемой. Что касается загрязнения глобального пространства имен, вы всегда можете объявить их в отдельном пространстве имен, если хотите. –

+0

Как насчет ['thread_local'] (http://en.cppreference.com/w/cpp/language/storage_duration)? – Quentin

ответ

0

Один из способов - создать экземпляр в вашей функции main и передать экземпляр каждой функции, где он используется, или передать конструкторам объектов, которым нужен пул.

Другая возможность - образец дизайна Синглтона.

Пламя драконов по обеим сторонам проблемы (Singleton vs. передача объекта). Выберите свой яд.

Смежные вопросы