Serialisierung mit Factory-Muster in C
Dieser Artikel behandelt die Serialisierung in C und bietet alternative Ansätze für das häufig verwendete Klassen-ID-Wechselmuster.
Problem:
Das klassische C-Serialisierungsmuster beinhaltet das Umschalten der Klasse IDs zum Deserialisieren von Objekten. Allerdings wird dieser Ansatz aufgrund seiner potenziellen Fehleranfälligkeit und Wartungskomplexität häufig als Antimuster angesehen.
Lösung 1: Boost Serialization
Boost Serialization ist ein dritter Ansatz. Party-Bibliothek, die die Serialisierung durch Automatisierung der Routinearbeit vereinfacht. Es bietet effiziente und zuverlässige Methoden zum Serialisieren und Deserialisieren von Objekten.
Lösung 2: Factory-Muster mit registrierbaren Klassen
Eine Alternative zum Wechseln der Klassen-ID ist die Verwendung eines Factory-Musters mit anmeldebaren Kursen. Hier ist eine grundlegende Implementierung in C:
<code class="cpp">template<typename K, typename T> class Factory { private: typedef T* (*CreateObjectFunc)(); std::map<K, CreateObjectFunc> mObjectCreator; public: template<typename S> void registerClass(K id) { mObjectCreator.insert(std::make_pair<K, CreateObjectFunc>(id, &createObject<S>)); } bool hasClass(K id) { return mObjectCreator.find(id) != mObjectCreator.end(); } T* createObject(K id) { typename std::map<K, CreateObjectFunc>::iterator iter = mObjectCreator.find(id); if (iter == mObjectCreator.end()) { return NULL; } return ((*iter).second)(); } };</code>
Dieser Ansatz ermöglicht die dynamische Registrierung von Klassen und die Erstellung von Objekten, sodass kein manueller Wechsel der Klassen-ID erforderlich ist.
Das obige ist der detaillierte Inhalt vonWie vermeide ich den Klassen-ID-Wechsel bei der C-Serialisierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!