Pengkhususan Ahli dalam Templat
Tidak mungkin untuk mengkhususkan sebahagian ahli tertentu dalam kelas templat. Pengkhususan separa mesti menyediakan semua hujah templat. Walau bagaimanapun, terdapat pendekatan alternatif untuk mencapai kefungsian yang serupa.
Fungsi Terlebih Beban
Satu penyelesaian adalah dengan memperkenalkan fungsi terlampau beban dalam kelas templat. Ini menyediakan akses yang sama kepada pembolehubah ahli dan fungsi seperti fungsi ahli khusus.
<code class="cpp">template <typename T, bool B> struct X { void Specialized(); }; template <typename T> void X<T, true>::Specialized() { // True-specialized implementation } template <typename T> void X<T, false>::Specialized() { // False-specialized implementation }</code>
Fungsi Terlebih Muatan dengan Parameter Templat
Pilihan lain adalah untuk lulus parameter pengkhususan sebagai hujah fungsi tambahan menggunakan parameter templat yang dibalut dalam struct.
<code class="cpp">template <typename T, bool B> struct X { void Specialized() { SpecializedImpl(i2t<B>()); } private: void SpecializedImpl(i2t<true>) { // True-specialized implementation } void SpecializedImpl(i2t<false>) { // False-specialized implementation } };</code>
Templat Kelas Berasingan untuk Pengkhususan
Tingkah laku khusus juga boleh dilaksanakan dalam templat kelas berasingan dan dipanggil dari dalam kelas templat utama.
<code class="cpp">template <typename T, bool B> struct SpecializedImpl { static void call() { // True- or false-specialized implementation } }; template <typename T, bool B> struct X { void Specialized() { SpecializedImpl<T, B>::call(); } };</code>
Kelas Templat Bersarang untuk Pengkhususan
Tingkah laku khusus boleh disarangkan dalam kelas templat utama sebagai kelas templat .
<code class="cpp">template <typename T, bool B> struct X { private: template <bool B> struct SpecializedImpl { }; public: void Specialized() { SpecializedImpl<B>::call(); } private: template <> struct SpecializedImpl<true> { static void call() { // True-specialized implementation } }; template <> struct SpecializedImpl<false> { static void call() { // False-specialized implementation } }; };</code>
Atas ialah kandungan terperinci Bagaimana untuk mencapai pengkhususan ahli dalam Templat C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!