Mengapa C Tidak Boleh Menyimpulkan T dalam Konteks Tidak Boleh Dipotong?
Dalam coretan kod yang diberikan, struct templat TMap ditakrifkan dengan jenis bersarang Jenis yang mewakili pengkhususan std::map menggunakan hujah templat T. Walau bagaimanapun, pengkompil gagal untuk menyimpulkan T dalam ujian fungsi.
Konteks Tidak Boleh Ditolak
Ralat berlaku kerana kod memanggil ujian dengan argumen yang mempunyai nama taip jenis TMap
Kekaburan dalam Inferens Jenis
Dalam konteks tidak boleh disimpulkan, pengkompil ialah tidak dapat membuat kesimpulan hujah templat kerana jenis hujah tidak secara unik menentukan T. Sebagai contoh, pertimbangkan perkara berikut senario:
template <> struct TMap<SomeType> { typedef std::map<double, double> Type; }; template <> struct TMap<OtherType> { typedef std::map<double, double> Type; };
Dalam kes ini, kedua-dua TMap
Akibat
Penghadan konteks yang tidak boleh disimpulkan mempunyai implikasi penting:
Mitigasi
Untuk mengurangkan had ini, seseorang boleh menggunakan teknik seperti hujah templat templat atau C 20 std::is_same_v untuk menyimpulkan hujah templat secara manual atau menyediakan senarai parameter templat yang eksplisit.
Atas ialah kandungan terperinci Mengapa C Tidak Dapat Menyimpulkan Argumen Templat dalam Konteks Tidak Boleh Disimpulkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!