如何以惯用的方式实现c++序列化器
How to implement a C++ serializer the idiomatic way?
作为练习,我正在用几种语言实现UBJson序列化器。我的问题是:在c++中是否有一种惯用的方法来实现自定义格式读取器和写入器?例如,我想实现另一种boost::serialization归档类型。
更多细节:类型自省部分不是问题-如果我使用我的实现,它将取代已经存在的json序列化器。我也理解递归序列化的概念。真正的问题是:我应该创建readInt, writeString方法,还是只创建两个模板化的读写方法,或者…div ?
嗯,我不知道有什么惯用的方法,尽管我知道的标准策略是只序列化最简单的类型。可以递归地将复杂对象分解成更简单的部分,直到找到基本的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 );
模板化序列化例程,或者只是提供特定的重载,这是一个优先考虑的问题。
相关文章:
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 使用GSoap实现ONVIF
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 用于AVX的ln(x)的实现,m256
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 在C++中,如何在类和函数(可能是模板化的)的头中编写完整的实现
- std::random_device是如何实现的