1

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

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

4

1 回答 1

1

嗯,我不知道任何惯用的方式,尽管我知道的标准策略是只序列化最简单的类型。可以递归地将复杂对象分解成更简单的部分,直到找到基本类型POD,例如int, 。然后为这些基本类型创建手工序列化例程。char *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 );

模板化序列化例程,或仅提供特定的重载是一个偏好问题。

于 2013-05-10T16:08:16.463 回答