Pelaksanaan Serial dengan ID Kelas untuk C
Serialization ialah teknik penting dalam pembangunan perisian untuk menyimpan keadaan objek dalam format yang boleh mudah dipindahkan dan disimpan. Secara tradisinya, pendekatan biasa dalam C adalah menggunakan ID kelas untuk bersiri. Ini melibatkan penentuan kelas asas dan terbitan serta melaksanakan penyataan suis yang mengarahkan pensirilan dan penyahsirilan ke kelas yang sesuai.
Walau bagaimanapun, penggunaan ID kelas untuk penyirian telah menimbulkan kebimbangan. Sesetengah pembangun berhujah bahawa ia menggalakkan anti-corak dan melanggar prinsip Berorientasikan Objek (OO).
Pendekatan Alternatif
Pensiri Boost menawarkan alternatif kepada ID kelas. Pustaka ini menyediakan rangka kerja yang kukuh dan ditulis dengan baik untuk penyirian objek. Dengan menggunakan Boost Serialization, pembangun boleh mengelakkan kelemahan siri berasaskan ID kelas.
Corak Kilang dengan Kelas Boleh Didaftar
Pendekatan lain ialah menggunakan corak Kilang dengan boleh didaftarkan kelas. Ini melibatkan penciptaan kilang yang memetakan kunci kepada fungsi pencipta templat. Apabila kelas baharu perlu dibuat, penuding kepada fungsi pencipta dimasukkan ke dalam peta.
Berikut ialah pelaksanaan C dipermudahkan bagi kelas Kilang:
<code class="cpp">template<typename K, typename T> class Factory { std::map<K, T *(*CreateObjectFunc)()> mObjectCreator; public: template<typename S> void registerClass(K id) { mObjectCreator.insert(std::make_pair(id, &createObject<S>)); } T* createObject(K id) { typename std::map<K, CreateObjectFunc>::iterator iter = mObjectCreator.find(id); if (iter == mObjectCreator.end()) { return NULL; } return ((*iter).second)(); } };</code>
Pendekatan ini membolehkan pendaftaran kelas baharu pada masa jalan dan memudahkan proses penciptaan objek berdasarkan kekunci.
Walaupun kedua-dua pendekatan bukan standard C, Boost Serialization dan corak Kilang dengan kelas boleh daftar menyediakan alternatif yang berdaya maju kepada ID kelas tradisional -bersiri berasaskan dalam C .
Atas ialah kandungan terperinci Adakah Pensirilan ID Kelas dalam C adalah Amalan Lama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!