序列化C++对象
Serializing C++ objects
我想实现一个序列化类,它接收一个对象并将其转换为二进制流并存储在文件中。稍后,应从文件重建对象。
虽然这个功能是由 C# 中的 BinaryFormatter 提供的,但我想设计我的从头开始拥有序列化类。
有人可以指出一些资源吗?
提前致谢
我想
给你一个否定的答案。它不太有用,但仍然可能。
我已经使用提升序列化好几年了,这是我公司最大的战略错误之一。它产生非常大的输出,它非常慢,它传播了一大堆依赖项,使编译速度非常慢,然后很难摆脱,因为你有现有的序列化格式。此外,它在不同的编译器上的行为不同,因此从VS2005升级到2010实际上导致我们编写了一个兼容层,这也是很难的,因为代码很难理解。
以下是 2 种用于C++序列化的解决方案:
- 斯蒂芬·比尔的 s11n 序列化库
- 提升序列化库
我个人只有第一个的经验,实际上只使用基于文本的序列化程序,但我知道定义二进制序列化程序以用于 s11n 很容易。
我已经使用 boost::序列化库一段时间了,我认为它非常好。您只需要像这样创建序列化代码:
class X {
private:
std::string value_;
public:
template void serialize(Archive &ar, const unsigned int version) {
ar & value_;
};
}
无需创建反序列化代码(这就是他们使用 & 运算符的原因)。但是,如果您愿意,您仍然可以使用 <<和>> 运算符。
也可以不加修改地为类编写序列化方法(例如:如果您需要序列化来自库的对象)。在这种情况下,您应该执行以下操作:
namespace boost { namespace serialization {
template
void serialize(Archive &ar, X &x const unsigned int version) {
ar & x.getValue();
};
}}
C++中间件编写器可能会感兴趣。 与 Boost 中的序列化库相比,它具有性能优势。 它还自动创建序列化函数。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 使用"std::unordereded_map"映射到"std::list"对象