Mengapa Pengkhususan Separa Fungsi Ahli Kelas dalam C Memerlukan Pengkhususan Keseluruhan Kelas?

Patricia Arquette
Lepaskan: 2024-11-19 04:40:03
asal
956 orang telah melayarinya

Why Does Partial Specialization of Class Member Functions in C   Require Specializing the Entire Class?

Pengkhususan Separa Fungsi Ahli Kelas dalam C

Pengkhususan separa ialah teknik berkuasa dalam templat C yang membolehkan mencipta versi khusus kelas atau fungsi untuk jenis tertentu. Apabila mencuba pengkhususan separa fungsi ahli kelas, adalah penting untuk ambil perhatian bahawa ia melibatkan pengkhususan keseluruhan kelas.

Dalam kod yang disediakan, matlamatnya adalah untuk mengkhususkan sebahagian fungsi ahli Deform() untuk Objek kelas apabila nValue ialah 0. Walau bagaimanapun, kod tersebut cuba mengkhususkan sebahagiannya hanya fungsi ahli tanpa mengkhususkan kelas, yang membawa kepada ralat: "PartialSpecification_MemberFu.cpp(17): ralat: senarai argumen templat mesti sepadan dengan senarai parameter Object&::Deform()."

Untuk membetulkan ralat ini, adalah perlu untuk mengkhususkan keseluruhan kelas untuk nValue bersamaan dengan 0. Ini melibatkan penciptaan kelas khusus Object yang mengatasi fungsi ahli Deform() dengan pelaksanaan khusus:

template <typename T>
class Object<T, 0>
{
private:
    T m_t;
    Object();
public:
    Object(T t): m_t(t) {}
    T Get() { return m_t; }
    Object&amp; Deform()
    {
        std::cout << "Spec\n";
        m_t = -1;
        return *this;
    }
};
Salin selepas log masuk

Dengan pengubahsuaian ini, pengkhususan separa fungsi ahli Deform() berfungsi seperti yang dimaksudkan. Pendekatan yang betul ini memastikan keseluruhan kelas dikhususkan apabila nValue ialah 0, mendayakan gelagat tersuai khusus untuk kes tersebut.

Atas ialah kandungan terperinci Mengapa Pengkhususan Separa Fungsi Ahli Kelas dalam C Memerlukan Pengkhususan Keseluruhan Kelas?. 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