Я пишу текстовую игру, доступную через TELNET для собственного развлечения на C++. Я создал иерархию классов, основанную на игровых аспектах/компонентах, таких как транспортные средства, пешеходы, игроки, транспортные средства, велосипеды и т. Д.Загрузка игровых данных в пул без глобальных координат
Я думаю о реализации объекта «Пул», который будет хранить указатели для определенных загруженных элементов. Я думаю об использовании функции Add() в пуле, которая будет перегружена на основе класса элемента, который я хотел бы добавить в пул. Проблема заключается в следующем: предположим, что я хочу, чтобы этот пул элементов (или некоторый слой поверх него) был доступен все время. Возможно, мне нужна функция GetAllVehicles() (просто быстрый пример), который будет просматривать данные пула и возвращать мне все транспортные средства в массиве с кучей указателей.
Дело в том, что если я захочу пройти через этот пул где-нибудь в своем коде. По сути, объект Pool должен быть глобальным в некотором смысле, потому что вы хотите получить доступ к загруженным игровым элементам повсюду без необходимости передавать созданный объект навечно. Однако я не хочу, чтобы он загрязнял глобальное пространство имен, и я хочу многопоточность, поэтому объявление глобальной переменной было бы особенно плохой идеей.
Вопрос прост: что мне делать, чтобы сделать эту работу?
Будет ли пул (и объекты в этом бассейне) неизменными? Если это так (или если вы можете сделать их так, например, установив их при запуске и обещая никогда не изменять их впоследствии), тогда доступ только для чтения из нескольких потоков не будет проблемой. Что касается загрязнения глобального пространства имен, вы всегда можете объявить их в отдельном пространстве имен, если хотите. –
Как насчет ['thread_local'] (http://en.cppreference.com/w/cpp/language/storage_duration)? – Quentin