Ho una classe Menu personalizzata scritta in C++. Per separare il codice in funzioni di facile lettura, sto utilizzando i callback.Un buon modo per implementare callback utilizzabili in C++
Poiché non desidero utilizzare Singletons per l'host del menu, fornisco un altro parametro (obiettivo) che verrà assegnato al callback come primo parametro (una sorta di soluzione alternativa per il riferimento "questo" mancante) .
Registrazione-Firma
AddItem(string s, void(*callback)(void*,MenuItem*), void* target = NULL)
Esempio di una registrazione
menu->AddItem(TRANSLATE, "translate", &MyApp::OnModeSelected);
Esempio di Handler
/* static */
void MyApp::OnModeSelected(void* that, MenuItem* item) {
MyApp *self = (MyApp*)that;
self->activeMode = item->text;
}
C'è qualcosa si potrebbe considerare sporco con questo approccio? Ce ne sono forse di migliori?
Si dovrebbe non usare i metodi dei membri statici come callback qui. Dovresti usare solo le funzioni dichiarate extern "C" .Si capita solo di essere fortunato che il compilatore che stai usando usi (attualmente) usi lo stesso metodo per chiamare metodi statici e le funzioni non sono garantite dallo standard –