Kekaburan dalam std::function Tandatangan Argumen Templat
Kekaburan timbul apabila kedua-duanya berfungsi
Untuk menggambarkan ini, pertimbangkan kelas:
<code class="cpp">template<class Signature> class myfunc{ public: template<class Func> myfunc(Func a_func){ // ... } };</code>
Apabila pengkompil cuba mencari fungsi yang berdaya maju untuk set lebihan, ia mencari kemungkinan penukaran. Dalam kes ini, kedua-dua pembina myfunc menerima apa sahaja, membenarkan penukaran daripada int(*)() kepada myfunc
Oleh itu, apabila memanggil a(x) atau a(y), pengkompil menemui dua fungsi yang berdaya maju, mengakibatkan kekaburan.
Resolusi
Tandatangan hujah templat bagi fungsi std:: ialah sebahagian daripada jenisnya apabila mengisytiharkan dan mentakrifkan fungsi. Walau bagaimanapun, semasa pembinaan objek, tandatangan diabaikan.
Untuk mengelakkan kekaburan, seseorang boleh:
Atas ialah kandungan terperinci Mengapakah `std::function` Membawa kepada Kekaburan dalam Tandatangan Argumen Templat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!