C 類ID 的序列化實現
序列化是軟體開發中的重要技術,用於以可用於儲存對象狀態的格式輕鬆傳輸和儲存。傳統上,C 中常見的方法是使用類別 ID 進行序列化。這涉及定義基類和派生類,以及實現將序列化和反序列化路由到適當的類的 switch 語句。
但是,使用類別 ID 進行序列化引起了人們的注意。一些開發人員認為它提倡反模式並違反物件導向 (OO) 原則。
替代方法
Boost Serialization 提供了類別 ID 的替代方案。該函式庫為物件序列化提供了一個健壯且編寫良好的框架。透過使用 Boost Serialization,開發人員可以避免基於類別 ID 的序列化的缺點。
有可註冊類別的工廠模式
另一種方法是使用具有可註冊類別的工廠模式類別。這涉及創建一個將鍵映射到模板創建器函數的工廠。當需要建立一個新類別時,指向創建者函數的指標將插入到映射中。
這是工廠類的簡化 C 實現:
<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>
這種方法允許在運行時註冊新類,並簡化基於鍵的對象創建過程。
雖然這兩種方法都不是 C 標準,但 Boost Serialization 和可註冊類別的工廠模式為傳統類別 ID 提供了可行的替代方案C 中的基於序列化。
以上是C 中的類別 ID 序列化是一種過時的做法嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!