4

我想实现一个序列化类,它接收一个对象并将其转换为二进制流并存储在一个文件中。之后,该对象应该从文件重建。序列化C++对象

虽然这个功能是由C#中的BinaryFormatter提供的,但我想从头开始设计我自己的Serializable类 。

有人可以指向一些资源?

在此先感谢

+0

你想支持的东西,如版本? –

+1

你不能。在C++中没有反省(a.k.a.反射)。该工具允许创建通用序列化对象。没有它,你必须添加序列化代码到你想要序列化的每个类。 –

+5

您可以参考boost序列化库来获取C++高级序列化系统的示例。 –

回答

2

我一直在使用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(); 
     }; 
    }} 
+0

'模板'没有参数?这是合法的吗? – immibis

5

我想给你一个否定的答案。它不太有用,但它仍然可能。

我几年来一直在使用boost序列化,这是我公司最大的战略错误之一。它产生的输出非常大,速度非常慢,它传播了大量的依赖关系,使得一切都不可能编译得很慢,然后因为你有现成的序列化格式,所以很难脱身。此外,它在不同的编译器上有不同的表现,因此从VS2005升级到2010实际上导致我们编写兼容层,这也很困难,代码很难理解。