Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mencapai pengkhususan ahli dalam Templat C?

Bagaimana untuk mencapai pengkhususan ahli dalam Templat C?

Patricia Arquette
Patricia Arquetteasal
2024-11-05 02:50:02369semak imbas

How to achieve member specialization in C   Templates?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn