У меня есть структура C, которая выглядит так
typedef struct event_queue{
Event* event;
int size;
int front;
int count;
int delay;
} event_queue;
Это базовая круговая очередь. Значение события представляет собой массив EventPointers, и он проходит каждый X раз, чтобы исключить одно из событий из очереди. Он инициализирован как
p->event = calloc(p->size, sizeof(Event));
Дело в том, что я хочу сделать аналогичную очередь с аналогичной функциональностью, чтобы ставить в очередь похожие события другого типа, но с немного другими данными. Изначально я просто хотел иметь отдельные очереди и проходить их по отдельности, но функциональность настолько повторяется, что кажется, что я просто делаю это неправильно. Представьте, что «сестринская» очередь точно такая же, но с указателем на другой тип для «события».
Должен ли я вместо этого использовать союз? такие как
typedef struct event_queue{
union{
Event* event;
VisualEvent* visual;
} data;
unsigned char* datatype; //array of same size as data for every individual member
int size;
int front;
int count;
int delay;
} event_queue;
Но как в таком случае выделить память для массива? Должен ли я держать их отдельно, и это плохая идея?