Kekaburan yang Berada dalam Std::Argumen Templat Fungsi Walaupun Menentukan Jenis
Dalam senario ini, berbilang bebanan wujud untuk fungsi 'a', setiap satu menerima tandatangan berbeza std::function:
The kekaburan timbul disebabkan oleh fakta bahawa kedua-duanya berfungsi
template<class _Fx> function(_Fx _Func, typename _Not_integral<!...int>::_Type = 0);
Pada asasnya, sebarang objek boleh ditukar menjadi fungsi std::, memudahkan pemadaman jenis dan membolehkan pengendalian objek sewenang-wenangnya sebagai fungsi.
Untuk menggambarkan lebih lanjut masalah, pertimbangkan contoh mudah berikut:
template<class Signature> class myfunc{ public: template<class Func> myfunc(Func a_func){ // ... } };
Semasa resolusi beban lampau untuk 'a', jika beban lampau yang berdaya maju tidak dapat dikenal pasti, pengkompil cuba menukar argumen menggunakan sama ada pembina parameter atau operator penukaran argumen. Dalam kes ini, penukaran berlaku melalui pembina myfunc.
Memandangkan pembina myfunc menerima apa-apa, kedua-dua fungsi
Akhirnya, ini mengakibatkan pengkompil tidak dapat menentukan beban berlebihan 'a' yang hendak digunakan, yang membawa kepada kekaburan.
Kepada selesaikan isu ini, anda mempunyai beberapa pilihan:
Atas ialah kandungan terperinci Mengapa Argumen Templat `std::function` Membawa kepada Kekaburan dalam Resolusi Lebihan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!