Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menyelesaikan Kekaburan dalam Pemuatan Penunjuk Fungsi dengan Ungkapan Lambda?

Bagaimana untuk Menyelesaikan Kekaburan dalam Pemuatan Penunjuk Fungsi dengan Ungkapan Lambda?

Barbara Streisand
Lepaskan: 2024-11-20 00:20:03
asal
526 orang telah melayarinya

How to Resolve Ambiguity in Function Pointer Overloading with Lambda Expressions?

Menyelesaikan Kekaburan dalam Penunjuk Fungsi Lebihan Pemuatan dengan Ungkapan Lambda Menggunakan Operator Unary Plus

Melebihkan fungsi dengan penuding fungsi dan std::fungsi boleh membawa kepada kekaburan apabila cuba menyampaikan ungkapan lambda sebagai hujah. Kekaburan ini berpunca daripada fakta bahawa ungkapan lambda boleh ditukar secara tersirat kepada kedua-dua penunjuk fungsi dan std::functions.

Untuk menyelesaikan kekaburan ini, operator tambah unary ( ) boleh digunakan sebelum ungkapan lambda. Pengendali memaksa lambda untuk ditukar kepada jenis penuding fungsi, yang dalam kes ini adalah tidak sah ()(). Ini membenarkan resolusi beban lampau untuk memilih dengan jelas fungsi penuding beban berlebihan foo(void (f)()).

Kod berikut menunjukkan penggunaan operator untuk menyelesaikan kekaburan:

#include <functional>

void foo(std::function<void()> f) { f(); }
void foo(void (*f)()) { f(); }

int main() {
    foo([]() {}); // ambiguous
    foo(+[]() {}); // not ambiguous (calls the function pointer overload)
}
Salin selepas log masuk

Dengan memahami peraturan penukaran jenis untuk ungkapan lambda dan kesan operator unary plus, kami boleh menyelesaikan kekaburan dalam fungsi dengan berkesan penuding terlebih beban apabila menghantar ungkapan lambda sebagai argumen.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Kekaburan dalam Pemuatan Penunjuk Fungsi dengan Ungkapan Lambda?. 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