Rumah > Artikel > pembangunan bahagian belakang > Mengapa Pengkhususan Separa Fungsi Ahli Kelas dalam C Memerlukan Pengkhususan Keseluruhan Kelas?
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
Untuk membetulkan ralat ini, adalah perlu untuk mengkhususkan keseluruhan kelas untuk nValue bersamaan dengan 0. Ini melibatkan penciptaan kelas khusus Object
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& 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!