Ich habe oft Gebrauch von Funktionszeigern bei der Arbeit mit Szenarios vom Typ "Befehl und Steuerung" gemacht, wo eine Nachricht an einen Prozess gesendet wird, auf dem eine Funktion ausgeführt wird anfordern. Dies sorgt für eine einigermaßen effiziente Implementierung, da man so etwas unter Verwendung einer switch-case
(Jump-Table-Optimierungen beiseite) nicht mehr tun muss. Zum Beispiel:Verwenden eines Arrays von Funktionszeigern auf Elementfunktionen in C++
Statt dessen:
switch(msg.cmd){
case FUNC0:
return func0(msg);
case FUNC1:
return func1(msg);
...
}
Wir so etwas tun könnte den entsprechenden Handler direkt auszuführen (Weglassen jede Vernunft Überprüfung auf msg.cmd
):
(*cmd_functions[msg.cmd])(msg)
Vor kurzem habe ich begann mit C++ - Code zu arbeiten, der ähnliche "Kontroll" -Funktionalität implementiert, aber ich bin dabei, einen switch-case zu verwenden. Gibt es dafür eine kanonische Methode in C++? Vielleicht eine Instanzvariable der Funktionszeiger-Array-Instanz, die im Konstruktor initialisiert wurde?
Ich war besorgt, die Lösung könnte ein wenig komplizierter aufgrund der Laufzeit Verwendung einer Klasse V-Tabelle sein.
Funktioniert die C-Methode nicht immer noch in C++? – JeremyP
Ich bin kein Experte für moderne C++, aber, da es nun [lambdas] (http://en.cppreference.com/w/cpp/language/lambda), können Sie nicht ein Array oder Vektor oder was auch immer von erstellen Lambda? – JeremyP
Nur neugierig, warum steckst du mit einem Schalterkoffer fest? Warum würde ein Sprungtisch nicht funktionieren? – mnistic