Rumah > Artikel > pembangunan bahagian belakang > Bolehkah Anda Mengkhususkan Sebahagian Fungsi Ahli dalam Templat C?
Pengkhususan Fungsi Ahli Templat Separa
Dalam C , tidak mungkin untuk mengkhususkan sebahagian ahli individu kelas templat. Pengkhususan templat mesti menentukan semua parameter templat.
Sebagai contoh, kod berikut tidak sah:
<code class="cpp">template <typename T> struct X { void Specialized(); }; template <typename T> // Only specializes for bool type void X<T>::Specialized() { ... } template <typename T> // Only specializes for float type void X<T>::Specialized() { ... }</code>
Penyelesaian
Terdapat beberapa penyelesaian untuk mencapai tingkah laku yang diingini:
Pengkhususan Eksplisit:
Anda boleh mengkhususkan keseluruhan kelas templat secara eksplisit untuk setiap gabungan argumen templat yang diingini. Contohnya:
<code class="cpp">template <> void X<int, true>::Specialized() { ... } template <> void X<float, false>::Specialized() { ... }</code>
Fungsi Terlebih:
Anda boleh mentakrifkan fungsi terlampau beban dengan nama yang sama dalam kelas templat dan menggunakan hujah templat untuk membezakan antara mereka. Contohnya:
<code class="cpp">template <typename T> struct X { void Specialized(bool b) { SpecializedImpl(i2t<b>()); } private: void SpecializedImpl(i2t<true>) { ... } void SpecializedImpl(i2t<false>) { ... } };</code>
Dengan menghantar nilai boolean kepada fungsi terlampau beban, anda boleh mencapai pengkhususan separa untuk fungsi ahli tertentu itu.
Templat Berparameter :
Anda boleh menentukan kelas templat yang berasingan untuk melaksanakan gelagat yang diingini berdasarkan parameter templat. Contohnya:
<code class="cpp">template <typename T, bool B> struct SpecializedImpl { static void call() { ... } }; template <typename T> struct X { void Specialized() { SpecializedImpl<T, B>::call(); } };</code>
Templat SpecializedImpl diparameterkan oleh kedua-dua T dan B, membolehkan anda mengkhususkannya berdasarkan nilai khusus parameter tersebut.
Pilihan penyelesaian untuk digunakan bergantung pada keperluan khusus kod dan pilihan pembangun.
Atas ialah kandungan terperinci Bolehkah Anda Mengkhususkan Sebahagian Fungsi Ahli dalam Templat C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!