Lambdas vs. Bind in C: Polymorphismus und Effizienz
Beim Vergleich der Verwendung von C 0x Lambdas und std::bind für ähnliche Aufgaben , die Wahl zwischen den beiden kann durch Faktoren wie Polymorphismus und Effizienz beeinflusst werden.
Bind vs. Lambda im Detail
Betrachten Sie das folgende Beispiel, in dem sowohl Lambda als auch Bind sind werden verwendet, um Zufallszahlen mithilfe einer Verteilung und Engine zu generieren:
// Using lambda auto dice = [&]() { return distribution(engine); }; // Using bind auto dice = bind(distribution, engine);
Polymorphismus
Im Gegensatz zu Lambdas, die monomorph sind (d. h. feste Typen haben), std: :bind ermöglicht polymorphes Verhalten. Dies bedeutet, dass bind zum Erstellen von Funktionen mit unbekannten Typen verwendet werden kann, wie unten gezeigt:
struct foo { typedef void result_type; template <typename A, typename B> void operator()(A a, B b) { cout << a << ' ' << b; } }; auto f = bind(foo(), _1, _2); f("test", 1.2f); // will print "test 1.2"
In diesem Beispiel werden die Typen von a und b zur Laufzeit abgeleitet, wenn f aufgerufen wird. Diese Flexibilität ist bei Lambdas nicht verfügbar.
Effizienz
Im Allgemeinen sind Lambdas tendenziell effizienter als bind, wenn die erfassten Variablen als Wert verwendet werden. Dies liegt daran, dass Lambdas Variablen direkt erfassen, während bind ein Abschlussobjekt erstellt, das auf die erfassten Variablen verweist. Allerdings kann Bind Vorteile bieten, wenn die erfassten Variablen groß sind oder wenn die Funktion häufig aufgerufen wird.
Fazit
Die Wahl zwischen Lambdas und Bind hängt von den spezifischen Anforderungen ab der Bewerbung. Lambdas bieten Polymorphismus und eignen sich effizient zum Erfassen kleiner Variablen vom Werttyp. Bind bietet mehr Flexibilität und ist möglicherweise vorzuziehen, wenn es um große oder häufig aufgerufene Funktionen geht.
Das obige ist der detaillierte Inhalt vonLambdas vs. Bind in C: Wann sollten Sie sich für beide entscheiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!