Ich habe eine benutzerdefinierte Menü-Klasse in C++ geschrieben. Um den Code in leicht lesbare Funktionen zu trennen, verwende ich Callbacks.Eine gute Möglichkeit, verwendbare Callbacks in C++ zu implementieren
Da ich Singletons für den Host des Menüs nicht verwenden möchte, stelle ich einen anderen Parameter (Ziel) zur Verfügung, der dem Callback als erster Parameter gegeben wird (eine Art Workaround für die fehlende "this" Referenz) .
Registration-Signatur
AddItem(string s, void(*callback)(void*,MenuItem*), void* target = NULL)
Beispiel einer Registrierung
menu->AddItem(TRANSLATE, "translate", &MyApp::OnModeSelected);
Beispiel für einen Handler
/* static */
void MyApp::OnModeSelected(void* that, MenuItem* item) {
MyApp *self = (MyApp*)that;
self->activeMode = item->text;
}
Gibt es alles, was man mit diesem Ansatz schmutzig könnte in Erwägung ziehen? Gibt es vielleicht bessere?
Sie sollten Verwenden Sie hier keine statischen Member-Methoden als Callback, Sie sollten nur Funktionen verwenden, die extern "C" deklariert sind Sie haben zufällig Glück, dass der von Ihnen verwendete Compiler (zur Zeit) die gleiche Methode zum Aufruf von statischen Methoden verwendet und funktioniert. Das ist nicht durch den standard garantiert. –