如何用惯用的方式实现C ++序列化器?

时间:2013-05-10 15:03:04

标签: c++ json serialization boost stl

作为练习,我正在使用多种语言实现UBJson序列化程序。我的问题是:是否有一种惯用的方式来在C ++中使用自定义格式的读写器?例如,我想过实现另一个boost :: serialization存档类型。

更多细节:类型 - 内省部分不是问题 - 如果我使用我的实现,那就是替换已经存在的json序列化器。我也理解递归序列化的概念。真正的问题是:我应该创建readInt,writeString方法,还是只创建两个模板化的读写方法,或者......?

1 个答案:

答案 0 :(得分:1)

嗯,我不知道任何惯用的方法,虽然我所知道的标准策略是只对最简单的类型进行序列化。可以递归地将复杂对象分解为更简单的部分,直到找到PODintchar *等基本float类型。然后创建这些基类型的手工序列化例程。

更复杂类型的序列化涉及这种递归类型内省,这导致从较小类型构建的较大的序列化例程。

然而,这种方法需要在C ++中使用某种形式的类型内省,结果证明它比序列化本身更复杂。这是我写的关于这个主题的文章:http://www.randygaul.net/2013/01/05/c-reflection-part-5-automated-serialization/

编写实际的序列化例程有两种主要方法。第一种方法是创建一个单一的序列化函数,它输入/输出bool

void Serialize( type instance, bool input );

第二种方法是将输入和输出写为单独的函数(我自己更喜欢):

void Serialize( type instance );
Variant Deserialize( type info );

模板化序列化例程,或仅提供特定的重载是一个优先考虑的问题。