Sto lavorando con un'API grafica C lineare (Allegro 5) che definisce un tipo di unione per contenere i dati generati da vari eventi di sistema, chiamiamolo "ALLEGRO_EVENT".
L'API C passa i sindacati di questo tipo a varie funzioni API tramite puntatore const. Visto che mi sto collegando a questa libreria da C ++ e modificando il sistema di gestione degli eventi un po 'per la mia applicazione, mi piacerebbe essere in grado di avvolgere questo tipo di unione in una sorta di interfaccia wrapper con operatori di accesso virtuali puri e user- operatori di conversione definiti, che possono essere sottoclassificati in vari tipi specializzati per il gestore di eventi (come ad esempio KeyboardEvent, JoystickEvent, ecc.)
Mi chiedo se esiste un insieme "canonico" di sovraccarichi che sarebbe appropriato per questo tipo di situazione? Ha più senso avere operatori di conversione definiti dall'utente e operatori di accesso ai membri che trattano questo oggetto come il tipo di unione stesso cioè operator ALLEGRO_EVENT()
, o più come un puntatore, poiché è così che il tipo sottostante viene passato attorno all'API?
In origine avevo cercato di creare un alias del tipo union wrapper per il tipo stesso sovraccaricando l'operatore "& address-of", ma ho trovato questo problematico in quanto vi sono un paio di istanze in cui mi piacerebbe essere in grado di funzionare direttamente con l'indirizzo del contenitore.