Bestimmen der Parameter- und Rückgabetypen von Lambda-Ausdrücken
Bei einem Lambda-Ausdruck kann es schwierig sein, seine Parameter- und Rückgabetypen zu ermitteln. In diesem Artikel wird untersucht, wie diese Informationen mithilfe von Lambda-Merkmalen extrahiert werden.
In C 11 werden Lambda-Ausdrücke eingeführt und können in verschiedenen Szenarien verwendet werden. Ein möglicher Anwendungsfall besteht darin, Lambdas als Argumente an Funktionsvorlagen zu übergeben. Um dies jedoch erfolgreich durchzuführen, ist die Kenntnis der Parameter- und Rückgabetypen des Lambdas von entscheidender Bedeutung.
Anfangs wird versucht, std::function zur Darstellung angetroffener Lambda-Ausdrücke zu verwenden Fehler. Die Einführung von lambda_traits bietet jedoch eine robustere Lösung. Mit dem Decltype des Lambda-Operators () kann lambda_traits die Parametertypen bestimmen.
Der folgende Codeausschnitt veranschaulicht, wie Lambda-Merkmale verwendet werden können, um Typinformationen aus einem Lambda-Ausdruck zu extrahieren:
template <typename TLambda> void f(TLambda lambda) { typedef typename lambda_traits<TLambda>::param_type P; typedef typename lambda_traits<TLambda>::return_type R; std::function<R(P)> fun = lambda; // Construct the std::function object }
In diesem Beispielszenario akzeptiert die f-Funktionsvorlage ein Lambda als Argument und nutzt Lambda-Merkmale, um seinen Parameter abzuleiten und zurückzugeben Typen.
Für generische Lambdas, die keine expliziten Typen angeben, wie [](auto x) {}, funktioniert dieser Ansatz nicht. Nichtsdestotrotz erweisen sich Lambda-Merkmale für Lambdas mit definierten Parametern und Rückgabetypen als effektiv.
Das obige ist der detaillierte Inhalt vonWie kann ich die Parameter- und Rückgabetypen eines C-Lambda-Ausdrucks bestimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!