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) }
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!