Pengkhususan Templat Fungsi Separa atau Berlebihan?
Dalam C , salah tanggapan lazim bahawa pengkhususan separa mungkin untuk templat fungsi. Walau bagaimanapun, piawaian C hanya membenarkan pengkhususan penuh.
Lebih muatan lwn. Pengkhususan Separa
Kod yang diberikan pada mulanya:
#include <iostream> 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; }
tidak menunjukkan pengkhususan separa tetapi membebankan fungsi maksimum. Lebihan beban membenarkan berbilang fungsi dengan nama yang sama tetapi jenis argumen yang berbeza.
Konsep Pengkhususan Separa
Pengkhususan separa ialah apabila kelas atau templat fungsi dikhususkan untuk set tertentu daripada parameter templat. Untuk kelas, ini dicapai dengan menyediakan templat khusus dengan nama yang sama tetapi parameter yang lebih sedikit. Untuk templat fungsi, pengkhususan separa akan melibatkan penetapan hanya subset parameter templat, yang pada masa ini tidak dibenarkan oleh standard C.
Contoh Pengkhususan Kelas Separa
Pengkhususan separa untuk kelas kelihatan seperti ini:
template <typename T1, typename T2> class MyClass { // ... }; // Partial specialization: both template parameters have the same type template <typename T> class MyClass<T, T> { // ... };
Penyusun Sambungan
Sesetengah penyusun, seperti Microsoft Visual Studio 2010 Express, mungkin menyediakan pengkhususan separa untuk templat fungsi sebagai sambungan. Walau bagaimanapun, penggunaan sambungan sedemikian menjejaskan kemudahalihan kod, kerana pengkompil lain mungkin tidak menyokongnya.
Atas ialah kandungan terperinci Pengkhususan Templat Fungsi Separa atau Lebih Muatan: Bilakah Anda Harus Menggunakan Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!