Serializing C++ objects

淺唱寂寞╮ 提交于 2019-12-05 14:20:13

I have been using boost::serialization library for a while now and I think it is very good. You just need to create the serialization code like this:

class X {
  private:
    std::string value_;
  public:
    template void serialize(Archive &ar, const unsigned int version) {
       ar & value_;
     };
 }

No need to create the de-serialization code ( that's why they used the & operator ). But if you prefer you can still use the << and >> operators.

Also it's possible to write the serialization method for a class with no modification ( ex.: if you need to serialize an object that comes from a library ). In this case, you should do something like:

namespace boost { namespace serialization {
       template
       void serialize(Archive &ar, X &x const unsigned int version) {
                    ar & x.getValue();
       };
    }}

I would like to give you a negative answer. It is less useful but it still may be.

I have been using boost serialization for several years and it was one of the greatest strategic mistakes of my company. It produces very large output, it is very slow, it propagates a whole bunch of dependencies making everything impossibly slow to compile, and then it is hard to get out because you have existing serialized formats. Further, it behaves differently on different compilers, thus upgrade from VS2005 to 2010 actually caused us to write a compatibility layer, which is also hard coz the code is very hard to understand.

Here are 2 solutions for C++ serialization:

I personally only have experience with the 1st one and actually only used text based serializers, but i know that it's easy to define binary serializers for use with s11n.

The C++ Middleware Writer may be of interest. It has performance advantages over the serialization library in Boost. It also automates the creation of serialization functions.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!