Pengkhususan Templat Separa dengan Fungsi Ahli
Apabila cuba mengkhususkan sebahagian templat untuk fungsi ahli, pembangun mungkin menghadapi ralat "penggunaan tidak sah jenis tidak lengkap." Untuk menyelesaikan masalah ini, adalah penting untuk memahami batasan pengkhususan separa dalam konteks ini.
Sumber Ralat
Kod di bawah cuba mengkhususkan sebahagian bar fungsi ahli untuk template foo:
template <typename S, typename T> struct foo { void bar(); }; template <typename T> void foo <int, T>::bar() { }
Kod ini menghasilkan ralat kerana pengkhususan separa tidak disokong untuk ahli fungsi.
Penyelesaian
Untuk menangani isu ini, seseorang mesti mengkhususkan sebahagian keseluruhan templat dan bukannya hanya fungsi ahli. Ini boleh dicapai menggunakan sintaks berikut:
template <typename S, typename T> struct foo { void bar(); }; template <> struct foo <int, T> { void bar(); };
Dengan mengkhususkan sebahagian keseluruhan templat, pengkompil boleh membuat instantiate sepenuhnya versi khusus dan mengelakkan ralat jenis yang tidak lengkap.
Nota : Pengkhususan separa fungsi dalam templat memerlukan penyelesaian yang lebih kompleks yang melibatkan ahli templat bersarang atau warisan daripada templat separa khusus.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyelesaikan Ralat 'penggunaan tidak sah jenis tidak lengkap' Apabila Mengkhususkan Sebahagian Fungsi Ahli Templat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!