Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Dapatkan Parameter dan Mengembalikan Jenis Ungkapan Lambda dalam C?

Bagaimanakah Saya Boleh Dapatkan Parameter dan Mengembalikan Jenis Ungkapan Lambda dalam C?

Patricia Arquette
Lepaskan: 2024-12-22 17:47:10
asal
877 orang telah melayarinya

How Can I Retrieve the Parameter and Return Types of a Lambda Expression in C  ?

Mendapatkan Parameter dan Jenis Pengembalian Lambda

Dalam ungkapan lambda, menentukan parameter dan jenis pulangan boleh menjadi penting untuk fungsi yang menerima lambda sebagai argumen. Mari kita terokai kebolehlaksanaan tugas ini dan pendekatan untuk mencapainya.

Ciri Lambda

Untuk mendapatkan parameter dan jenis pengembalian lambda, adalah dicadangkan untuk menentukan templat lambda_traits yang boleh digunakan 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
Salin selepas log masuk

Dengan memanfaatkan lambda_traits, fungsi boleh mengintrospeksi parameter dan mengembalikan jenis lambda yang diterima sebagai argumen, membolehkan kefungsian lanjutan seperti:

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; //I want to do this!
   //...
}
Salin selepas log masuk

Menggunakan decltype untuk Introspeksi Jenis Parameter

Mujurlah, adalah mungkin untuk mendapatkan semula jenis parameter menggunakan decltype operator lambda(). Teknik ini ditunjukkan dengan elegan dalam pelaksanaan function_traits berikut:

template <typename T>
struct function_traits
    : public function_traits<decltype(&amp;T::operator())>
{};
Salin selepas log masuk

Untuk lambda generik, function_traits secara langsung menggunakan tandatangan operatornya(). Untuk penunjuk fungsi ahli, ia mengkhususkan dan menyediakan jenis arity, result_type dan argumen.

Contoh Penggunaan

Pertimbangkan contoh berikut:

int main()
{
    auto lambda = [](int i) { return long(i*10); };

    typedef function_traits<decltype(lambda)> traits;

    static_assert(std::is_same<long, traits::result_type>::value, "err");
    static_assert(std::is_same<int, traits::arg<0>::type>::value, "err");

    return 0;
}
Salin selepas log masuk

Contoh ini menggambarkan cara menggunakan function_traits untuk mengesahkan parameter yang dijangkakan dan jenis pengembalian lambda. Ambil perhatian bahawa pendekatan ini mungkin tidak berfungsi untuk lambda generik seperti [](auto x) {}.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan Parameter dan Mengembalikan Jenis Ungkapan Lambda dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan