Bestimmen der Parameter- und Rückgabetypen eines Lambda
Bei einem gegebenen Lambda ist es möglich, seinen Parametertyp und Rückgabetyp mithilfe der Kompilierung zu extrahieren -Zeittechniken. Dies kann durch die Verwendung von Lambda-Merkmalen erreicht werden, die eine Möglichkeit bieten, zur Kompilierungszeit auf Informationen über Lambdas zuzugreifen.
Um Lambda-Merkmale zu definieren, können wir den Decltype-Operator nutzen, um die Signatur des Lambda-Operators zu überprüfen( ). Indem wir eine Vorlage auf diesen Typ spezialisieren, können wir die Parameter- und Rückgabetypen abrufen.
Zum Beispiel implementiert der folgende Code Lambda-Merkmale:
template<typename T> struct lambda_traits : public lambda_traits<decltype(&T::operator())> { }; template<typename ReturnType, typename... Args> struct lambda_traits<ReturnType(Args...)> { using param_type = Args...; using return_type = ReturnType; };
Mit diesen Merkmalen können wir die abrufen Parameter- und Rückgabetypen eines Lambda wie folgt:
auto lambda = [](int i) { return long(i * 10); }; lambda_traits<decltype(lambda)>::param_type i; // i should be int lambda_traits<decltype(lambda)>::return_type l; // l should be long
Dieser Ansatz ermöglicht es uns, std::function-Objekte dynamisch aus Lambdas zu konstruieren, wie in gezeigt der folgende Code:
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 }
Beachten Sie, dass dieser Ansatz für generische Lambdas wie [](auto x) {} fehlschlägt, da die genauen Typen zur Kompilierungszeit nicht ermittelt werden können.
Das obige ist der detaillierte Inhalt vonWie kann ich die Parameter- und Rückgabetypen eines C-Lambda zur Kompilierungszeit bestimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!