Generische Lambdas in C 14: Ein tieferer Einblick
Mit dem Aufkommen generischer Lambdas in C 14 wurde eine neue Funktion für Lambda-Ausdrücke eingeführt, die es ermöglicht für Funktionen mit automatisch abgeleiteten Argumenttypen. Über den Funktionsmechanismus dieser Generika wurde jedoch spekuliert.
Entgegen anfänglichen Annahmen sind generische Lambdas für ihre Implementierung nicht auf C-Vorlagen angewiesen. Stattdessen verfolgen sie einen einzigartigen Ansatz, der einen vorlagengesteuerten Aufrufoperator für den Abschlusstyp des Lambda beinhaltet.
Zum Beispiel erzeugt der generische Lambda-Ausdruck:
auto glambda = [](auto a) { return a; };
einen Abschlusstyp mit dem folgenden Vorlagenbasierter Aufrufoperator:
class /* unnamed */ { public: template <typename T> T operator () (T a) const { return a; } };
Der Aufrufoperator basiert auf einem erfundenen Typvorlagenparameter für jede Instanz von auto in der Parameterdeklaration des Lambda. Diese Parameter ermöglichen, dass der abgeleitete Typ bei jedem Aufruf des Lambda variiert.
Dieser vorlagenbasierte Ansatz unterscheidet sich von C-Vorlagen, die für jeden eindeutigen Argumenttyp neue Funktionen generieren. Stattdessen funktioniert es eher wie die Generika von Java, bei denen die zugrunde liegende Typlöschung eine effiziente Implementierung ermöglicht, ohne dass spezielle Funktionsgenerierungen erforderlich sind.
Zusammenfassend lässt sich sagen, dass generische Lambdas in C 14 einen vorlagengesteuerten Aufrufoperator anstelle herkömmlicher C-Vorlagen nutzen. Diese Designwahl schafft ein Gleichgewicht zwischen Ausdruckskraft und Optimierung und bietet eine bequeme Möglichkeit, mit Funktionen mit automatisch abgeleiteten Argumenttypen zu arbeiten.
Das obige ist der detaillierte Inhalt vonWie erreichen generische C 14-Lambdas eine Typableitung ohne herkömmliche Vorlagen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!