В настоящее время я работаю над Roguelike, где у меня есть несколько разных очередей событий (в форме векторов), которые обрабатывают несколько разных категорий событий. Вернее, разные игровые объекты имеют свои собственные очереди событий.
В данных тайла карты у меня есть специальная триггерная структура, которая активируется, когда игрок (или что-то еще) входит в тайл. Эта структура листов предоставляет данные для генерации флага события, который затем необходимо поместить в соответствующую очередь событий.
Структура плитки выглядит следующим образом:
struct tile{
int t_type;
trigger t_dgram;
vector<actor*> occupied;
vector<item*> loot;
public:
void trigger_tile(int ns, int we, );
};
Сама структура триггера может содержать информацию для определения, какая очередь является подходящей, но невозможно удерживать указатели на все возможные очереди событий для каждого тайла на карте, особенно потому, что у меня есть карты, динамически генерирующие местность на лету для бесконечных карт ,
Таким образом, вопрос состоит из двух частей: было бы неплохо приводить вектор к пустому указателю при вызове функции:
void tile :: trigger_tile(int ns, int we, void *queue_ob);
tile
Сам объект сможет определить правильный тип вектора очереди и разыменовать пустой указатель, используя trigger t_dgram
переменная-член, но разве это хорошая идея? Есть ли какая-то опасность для этого, о которой я не знаю?
Как бы вы лично предложили мне добиться подобного эффекта?
Спасибо за ваше время.
«Триггер» звучит для меня как класс.
struct Trigger {
virtual void triggeredOn(tile *tile) = 0;
}
затем tile
имеет указатель на свой триггер:
struct tile{
...
...
Trigger *trigger;
void trigger_tile(int ns, int we, ){trigger.triggeredOn(this)};
};
Теперь классы производные от Trigger
может содержать указатели на любые очереди или даже делать то, что не связано с очередями.
Таким образом, вопрос состоит из двух частей: было бы неплохо приводить вектор к пустому указателю при вызове функции:
Нет, это не звучит правильно. Возможно, вы хотели навести указатель на вектор void*
, который будет в порядке, пока нижестоящая функция, которая использует void*
бросает обратно к указателю вектора перед доступом к элементам вектора.