在C 中使用工廠模式進行序列化
本文討論了C 中的序列化,並提供了常用類ID 切換模式的替代方法。
問題:
經典的 C 序列化模式涉及切換類別 ID 來反序列化物件。然而,由於其潛在的易錯性和維護複雜性,這種方法通常被認為是反模式。
解決方案 1:Boost Serialization
Boost Serialization 是第三種 - party 函式庫,透過自動化繁重的工作來簡化序列化。它為序列化和反序列化物件提供了高效可靠的方法。
解決方案 2:具有可註冊類的工廠模式
類別 ID 切換的替代方法是使用工廠模式與可註冊的課程。這是 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>
這種方法允許動態註冊類別和建立對象,避免手動切換類別 ID。
以上是如何避免 C 序列化中的類別 ID 切換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!