如何以惯用的方式实现c++序列化器



作为练习,我正在用几种语言实现UBJson序列化器。我的问题是:在c++中是否有一种惯用的方法来实现自定义格式读取器和写入器?例如,我想实现另一种boost::serialization归档类型。

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

嗯,我不知道有什么惯用的方法,尽管我知道的标准策略是只序列化最简单的类型。可以递归地将复杂对象分解成更简单的部分,直到找到基本的POD类型,如intchar *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 );

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

最新更新