Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Pengkhususan Separa Fungsi Ahli Kelas dalam C Memerlukan Pengkhususan Keseluruhan Kelas?

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

Patricia Arquette
Patricia Arquetteasal
2024-11-19 04:40:03947semak imbas

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;
    }
};

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!

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