Was ist der Unterschied zwischen Funktoren und Funktionszeigern? Zum Beispiel
%Vor%Beide Ansätze funktionieren, aber ich bin mir sicher, dass es Fälle geben wird, in denen man gegenüber anderen bevorzugt ist (oder möglich ist).
Zum einen kann der Funktor einen internen Zustand enthalten; ein Zustand, der nur für diesen Aufruf des Funktionsobjekts gültig ist. Sie könnten static
Variablen zu Ihrer Funktion hinzufügen, aber diese würden für alle Aufrufe der Funktion verwendet werden.
Zweitens kann der Compiler Inline-Aufrufe an den Funktor übergeben; Es kann nicht dasselbe für einen Funktionszeiger sein. Das ist der Grund, warum C ++ std::sort()
die Leistung von C qsort()
leistungsmäßig schlägt.
functors können sogar benutzt werden, um Lambda-Ausdrücke zu emulieren (wenn Sie einen älteren Compiler vor C ++ 11 / C ++ 14 verwenden müssen), weil sie einen individuellen Status haben können (zB als Member-Variablen).
%Vor%oder als Lambda
%Vor%Funktionszeiger können nur Argumente erhalten, sind aber zustandslos, sofern sie nicht auf globale Variablen zugreifen (was wirklich schlecht und gefährlich ist).
%Vor%Tags und Links c++ function-pointers functor