2016-11-03 26 views
1

我有很多類,比如,設計問題,反序列化

class A 
{ 
/*member variables*/ 
}; 

class B .. Class Z 

我複製這些類的對象到緩衝區(字符*)。現在我有一個閱讀器對象,它連續輪詢這個緩衝區並將字節反序列化爲對象並打印出來。我的問題是如何設計deserialzer類。

我的方法是將對象的類型作爲頭部嵌入,然後通過緩衝區發送。在讀取緩衝區時,我知道類型,然後我可以反序列化適當的對象。反序列化部分的問題是現在應該知道所有的消息類型,並根據類型調用適當的函數。我打算將這種反序列化作爲一個單獨的實體,它不知道消息類型,或者將它反序列化的代碼不應該成爲它的一部分。

我正在尋找接口,多態等解決方案來解決這個問題。有這種問題的設計模式嗎?

+0

也許這個:http://www.boost.org/doc/libs/1_62_0/libs/serialization/doc/index.html將會對你有用(boost :: serialization);) –

+0

另外看看你是否需要自己做。請查看https://developers.google.com/protocol-buffers/,https://thrift.apache.org/或https://avro.apache.org/。 – PsiX

回答

0

第一個問題,是同一翻譯單元上的讀者和作者?

如果是,那麼你可以有多態類。基類Message及其派生類。讀者將緩衝區讀取爲Message*,然後調用重寫的虛函數以獲取有關派生類的必需信息。

如果不是,則可以在消息中插入類型到整型代碼。