最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)(三)
gs serialized in the wholeprogram - probably not what one would intend.
也就是说如果你想序列化原生类型的指针,需要给其加上struct或class使其变为类类型再序列化,可见有些麻烦,这样的需求往往也很频繁,鉴于序列化机制的实现原理,boost库暂时还不能很好的支持基本类型的指针序列化。
不能序列化变长数组(variable-sized array),会报错说变长数组不是模板类类型。
(4)如果需要定义一个对象数组,如定义含有2个元素的class A对象数组,那么必须用A a[2]定义而不能用对象的指针A *a = new A[2]定义,这样序列化a后默认当作一个A对象处理,因此只能存储一个对象的值,后面的不会存储。
(5)所谓boost很人性的非侵入性质也有一定的条件:如果不想改动原来的类,那么原来的类属性必须是public的,这很容易解释,因为你必须 要能在别处访问到这些属性并定义其序列化方式,当然这也在其它地方暴露了类的结构,具有一定的劣势。这样的条件往往很难满足,因为我们定义的类属性一般都 是private的,如果是这样,且仍想要使用非侵入性质,那么需要在类中添加以下声明来开放访问给 serialization 库:
friend class boost::serialization::access;
这样的方式比让成员public更好。