Heim >Backend-Entwicklung >C++ >Wie kann ich die Parameter- und Rückgabetypen eines C-Lambda zur Kompilierungszeit bestimmen?

Wie kann ich die Parameter- und Rückgabetypen eines C-Lambda zur Kompilierungszeit bestimmen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-25 17:53:11690Durchsuche

How Can I Determine the Parameter and Return Types of a C   Lambda at Compile Time?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn