Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menukar Lambdas kepada `std::function` dalam C Tanpa Menentukan Parameter Templat Secara Eksplisit?

Bagaimanakah Saya Boleh Menukar Lambdas kepada `std::function` dalam C Tanpa Menentukan Parameter Templat Secara Eksplisit?

Susan Sarandon
Lepaskan: 2024-12-04 12:58:09
asal
828 orang telah melayarinya

How Can I Convert Lambdas to `std::function` in C   Without Explicitly Specifying Template Parameters?

Menukar Lambdas kepada std::function dengan Templat

Dalam C , menukar lambda kepada std::function tanpa menyatakan parameter templat secara eksplisit memberikan cabaran. Mari kita terokai masalah dan penyelesaiannya.

Memahami Isu

Apabila mentakrifkan fungsi std::tanpa menentukan parameter templat, pengkompil tidak boleh menyimpulkan jenis lambda hujah. Ini kerana jenis lambda bergantung pada jenis parameternya, yang tidak diketahui oleh pengkompil pada masa instantiasi templat.

Penyelesaian: Jenis Identiti

Untuk memintas isu ini, kami boleh membungkus lambda dalam jenis identiti, yang mengabaikan jenis bergantung semasa potongan jenis templat. Berikut ialah contoh:

template <typename T>
struct identity
{
  typedef T type;
};

template <typename... T>
void func(typename identity<std::function<void(T...)>>::type f, T... values) {
  f(values...);
}
Salin selepas log masuk

Pendekatan ini membolehkan kami menghantar lambda kepada fungsi func() tanpa menyatakan parameter templat secara eksplisit.

Penghadan

Penyelesaian ini, walau bagaimanapun, mempunyai had:

  • Ia memerlukan lulus tambahan hujah kepada fungsi, yang mungkin tidak diingini dalam semua senario.
  • Ia tidak boleh mengendalikan kes di mana lambda menangkap pembolehubah daripada skop sekeliling.

Pendekatan Alternatif

Jika lambda tidak menangkap pembolehubah dan anda sanggup melakukannya secara eksplisit nyatakan parameter templat, anda boleh menggunakan pendekatan berikut:

std::function<void()> f = [](int x, int y, int z) { std::cout << (x*y*z) << std::endl; };
Salin selepas log masuk

Kaedah ini lebih mudah dan berfungsi dengan baik apabila parameter templat diketahui pada masa penyusunan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Lambdas kepada `std::function` dalam C Tanpa Menentukan Parameter Templat Secara Eksplisit?. 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