Pengkhususan Eksplisit Fungsi Ahli untuk Templat Kelas
Pengkhususan eksplisit fungsi ahli dalam templat kelas memerlukan templat kelas sekeliling secara eksplisit khusus juga. Kod asal dalam soalan cuba mengkhususkan fungsi ahli get_as() untuk dua kali ganda dalam konteks X
Untuk menyelesaikan isu ini, seseorang boleh mengkhususkan kedua-dua templat kelas dan fungsi ahli secara eksplisit, seperti yang dilihat di bawah:
template <> template <> void X<int>::get_as<double>() { }
Pendekatan ini mengkhususkan get_as
Jika templat kelas di sekeliling kekal tidak dikhususkan, teknik alternatif boleh digunakan. Satu kaedah sedemikian melibatkan penggunaan lebihan beban, seperti yang digambarkan:
template <class C> class X { template<typename T> struct type { }; public: template <class T> void get_as() { get_as(type<T>()); } private: template<typename T> void get_as(type<T>) { } void get_as(type<double>) { } };
Dalam pendekatan ini, fungsi get_as() terlebih dimuatkan dengan dua versi: satu yang mengambil hujah generik dan satu lagi yang secara khusus mengendalikan kes untuk double. Ini membenarkan pengkhususan eksplisit bagi fungsi ahli tanpa memerlukan pengkhususan templat kelas sekeliling.
Atas ialah kandungan terperinci Bagaimana Mengkhususkan Fungsi Ahli Secara Eksplisit dalam Templat Kelas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!