У меня есть вопрос о том, что я до сих пор не понимаю в профсоюзах.Я читал о многих их применениях и по большей части вижу, как они могут быть полезны, и понимаю их.Я видел, что они могут обеспечить примитивный полиморфизм в стиле «С».Примером, который я видел на нескольких веб-сайтах, является объединение событий SDL:
typedef union {
Uint8 type;
SDL_ActiveEvent active;
SDL_KeyboardEvent key;
SDL_MouseMotionEvent motion;
SDL_MouseButtonEvent button;
SDL_JoyAxisEvent jaxis;
SDL_JoyBallEvent jball;
SDL_JoyHatEvent jhat;
SDL_JoyButtonEvent jbutton;
SDL_ResizeEvent resize;
SDL_ExposeEvent expose;
SDL_QuitEvent quit;
SDL_UserEvent user;
SDL_SysWMEvent syswm;
} SDL_Event;
Что я не могу понять, так это то, как может существовать «типовой» член, сосуществующий с типами событий?Разве каждому из них не разрешено существовать по одному, поскольку они занимают одну и ту же область памяти?Разве объединение не существовало бы в любое время как ЛИБО тип или одно из событий?
Я понимаю, что каждое событие на самом деле является структурой с членом типа, например:
// SDL_MouseButtonEvent
typedef struct{
Uint8 type;
Uint8 button;
Uint8 state;
Uint16 x, y;
} SDL_MouseButtonEvent;
Как это как-то имеет смысл?Позволяет ли это как-то члену типа объединения представлять тип структуры, которой в данный момент является объединение?Является ли это своего рода странным эффектом, который происходит, когда каждый член объединения, кроме одного, является структурой, и каждая структура содержит этот один член?
Можно ли получить доступ к членам структуры, не зная, какой структурой является объект?
Спасибо!