Bagaimana untuk mencapai pengkhususan ahli dalam Templat C?

Patricia Arquette
Lepaskan: 2024-11-05 02:50:02
asal
368 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!