Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan Parameter dan Jenis Pengembalian Lambda C pada Masa Kompilasi?

Bagaimanakah Saya Boleh Menentukan Parameter dan Jenis Pengembalian Lambda C pada Masa Kompilasi?

Linda Hamilton
Linda Hamiltonasal
2024-12-25 17:53:11685semak imbas

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

Menentukan Parameter dan Jenis Pengembalian Lambda

Memandangkan lambda, adalah mungkin untuk mengekstrak jenis parameter dan jenis kembali menggunakan compile -teknik masa. Ini boleh dicapai melalui penggunaan ciri lambda, yang menyediakan cara untuk mengakses maklumat tentang lambda pada masa penyusunan.

Untuk menentukan ciri lambda, kami boleh memanfaatkan pengendali decltype untuk memeriksa tandatangan pengendali lambda( ). Dengan mengkhususkan templat pada jenis ini, kami boleh mendapatkan semula parameter dan jenis pengembalian.

Sebagai contoh, kod berikut melaksanakan ciri lambda:

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;
};

Dengan ciri ini, kami boleh mendapatkan semula parameter dan jenis pulangan lambda seperti berikut:

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

Pendekatan ini membolehkan kami membina secara dinamik std::function objects daripada lambdas, seperti yang ditunjukkan dalam kod berikut:

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
}

Perhatikan bahawa pendekatan ini gagal untuk lambda generik, seperti [](auto x) {}, disebabkan oleh ketidakupayaan untuk menentukan jenis yang tepat pada masa penyusunan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Parameter dan Jenis Pengembalian Lambda C pada Masa Kompilasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn