作为练习,我正在实现 UBJson多种语言的序列化器。我的问题是:是否有一种惯用的方法可以在 C++ 中实现自定义格式的读取器和写入器?例如,我想实现另一种 boost::serialization 存档类型。
更多细节:类型内省(introspection)部分不是问题 - 如果我曾经使用我的实现,它会替换已经存在的 json 序列化程序。我也理解递归序列化的概念。真正的问题是:我应该创建 readInt 和 writeString 方法,还是只创建两个模板化的读写方法,或者...?
最佳答案
嗯,我不知道有什么惯用的方法,尽管我知道的标准策略是只序列化最简单的类型。可以递归地将复杂对象分解为更简单的部分,直到基本 POD
类型,例如 int
、char *
、float
被发现。然后为这些基本类型创建手工序列化例程。
更复杂类型的序列化涉及这种递归类型自省(introspection),这会导致从较小的序列化例程构建更大的序列化例程。
然而,这种方法需要在 C++ 中进行某种形式的类型自省(introspection),事实证明这比序列化本身要复杂得多。这是我写的一篇关于该主题的文章: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 );
模板化序列化例程,或仅提供特定重载是一个偏好问题。
关于c++ - 如何以惯用的方式实现 C++ 序列化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16485280/