Pengkhususan Separa Templat Fungsi dalam C : Penjelasan
Dalam C , pengkhususan separa templat fungsi tidak dibenarkan oleh standard. Walau bagaimanapun, penyusun tertentu, seperti Microsoft Visual Studio 2010 Express, mungkin membenarkan pengkhususan separa sebagai sambungan.
Pengkhususan separa templat fungsi melibatkan penentuan pelaksanaan khusus untuk templat dengan set argumen tertentu. Tidak seperti templat kelas, yang membenarkan pengkhususan penuh dan separa, templat fungsi hanya menyokong pengkhususan penuh.
Pertimbangkan kod berikut:
template <typename T1, typename T2> inline T1 max(T1 const& a, T2 const& b) { return a < b ? b : a; } template <typename T> inline T const& max(T const& a, T const& b) { return 10; }
Kod ini nampaknya mengkhususkan sebahagian templat fungsi maks untuk hujah dari jenis yang sama. Walau bagaimanapun, ini sebenarnya bukan kes pengkhususan separa. Sebaliknya, templat fungsi kedua ialah versi terlebih muatan bagi yang pertama, dengan nama yang sama tetapi jenis parameter yang berbeza.
Sintaks untuk pengkhususan separa templat fungsi, jika dibenarkan, akan menyerupai yang berikut:
template <typename T> inline T const& max<T, T>(T const& a, T const& b) { return a; }
Dalam kod yang disediakan, fungsi maks kedua dibebankan untuk mengendalikan kes di mana kedua-dua argumen mempunyai jenis yang sama. Ini bukan pengkhususan separa tetapi lebih muatan berdasarkan jenis hujah.
Adalah penting untuk ambil perhatian bahawa pengkompil yang menyokong pengkhususan separa templat fungsi mungkin membenarkan kod yang tidak mematuhi piawaian C. Kod mudah alih harus mengelak daripada bergantung pada sambungan sedemikian.
Atas ialah kandungan terperinci Mengapa C Tidak Membenarkan Pengkhususan Separa Templat Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!