我想实现一个序列化类,它接收一个对象并将其转换为二进制流并存储在一个文件中。之后,该对象应该从文件重建。序列化C++对象
虽然这个功能是由C#中的BinaryFormatter提供的,但我想从头开始设计我自己的Serializable类 。
有人可以指向一些资源?
在此先感谢
我想实现一个序列化类,它接收一个对象并将其转换为二进制流并存储在一个文件中。之后,该对象应该从文件重建。序列化C++对象
虽然这个功能是由C#中的BinaryFormatter提供的,但我想从头开始设计我自己的Serializable类 。
有人可以指向一些资源?
在此先感谢
我一直在使用boost :: serialization库一段时间,我认为它非常好。你只需要创建这样的序列化代码:
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();
};
}}
'模板'没有参数?这是合法的吗? – immibis
这里是C++系列化2个解决方案:
我个人只与1号一个经验和实际只使用文本但我知道很容易定义用于s11n的二进制序列化器。
我想给你一个否定的答案。它不太有用,但它仍然可能。
我几年来一直在使用boost序列化,这是我公司最大的战略错误之一。它产生的输出非常大,速度非常慢,它传播了大量的依赖关系,使得一切都不可能编译得很慢,然后因为你有现成的序列化格式,所以很难脱身。此外,它在不同的编译器上有不同的表现,因此从VS2005升级到2010实际上导致我们编写兼容层,这也很困难,代码很难理解。
C++ Middleware Writer可能是感兴趣的。它有performance advantages over the serialization library in Boost。它还自动创建序列化函数。
你想支持的东西,如版本? –
你不能。在C++中没有反省(a.k.a.反射)。该工具允许创建通用序列化对象。没有它,你必须添加序列化代码到你想要序列化的每个类。 –
您可以参考boost序列化库来获取C++高级序列化系统的示例。 –