In C 14 brachte die Einführung generischer Lambdas eine neue Dimension der Flexibilität im Code mit sich. Sie nutzen die Leistungsfähigkeit von „auto“ als Argumenttyp, aber basiert ihr Mechanismus auf C-Vorlagen oder einer Java-ähnlichen Typlöschung?
Generische Lambdas nutzen C-Vorlagen zur Definition ein Abschlusstyp, der über einen vorlagengesteuerten Anrufoperator verfügt. Dies unterscheidet sich vom Aufrufoperator ohne Vorlage in C 11-Lambdas. Betrachten Sie das Beispiel:
auto glambda = [](auto a) { return a; };
Hier ist der Verschlusstyp von Glambda wie folgt definiert:
class /* unnamed */ { public: template<typename T> T operator () (T a) const { return a; } };
Generischer Lambdas-Anteil Ähnlichkeiten mit C-Vorlagen, bei denen der Compiler unterschiedliche Funktionen für verschiedene Argumenttypen generiert. Es gibt jedoch einen entscheidenden Unterschied: Generische Lambdas erstellen zur Kompilierungszeit nicht mehrere Funktionsinstanzen. Stattdessen verwenden sie einen einzelnen unbenannten Funktor, der einen vorlagenbasierten Aufrufoperator definiert.
Im Gegensatz zu Java-Generika, die Typlöschung verwenden, bewahren generische Lambdas Typinformationen. Die Typvorlagenparameter im Aufrufoperator ermöglichen es dem Lambda, die tatsächlichen Argumenttypen zur Laufzeit abzuleiten und zu manipulieren.
Generische Lambdas in C 14 sind ein leistungsstarkes Werkzeug zum Schreiben von prägnantem und flexiblem Code . Obwohl sie von C-Vorlagen inspiriert sind, ist ihr Mechanismus deutlich anders und bietet eine einzigartige Mischung aus Kompilierzeit- und Laufzeitverhalten.
Das obige ist der detaillierte Inhalt vonBasieren generische C 14-Lambdas auf Vorlagen oder Typlöschung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!