|
关键词: boost serialization share_ptr 使用boost::serialization要注意:
1)阅读文档,没有其他地方的论述比这更好了;
2)阅读文档中<<A Very Simple Case>>要特别注意的是
const gps_position g(35, 59, 24.567f);
这一句中的const是核心,改为
gps_position g(35, 59, 24.567f);
是不行的,但改为
gps_position g(35, 59, 24.567f);
const gps_position cg=g;
......
oa << cg;
是可以的;
3)要序列化shared_ptr得添加
#include <boost/serialization/shared_ptr.hpp>
头文件(以此类推还有list等).
但更为重要的是:
若class Derive:public Base.....
typedef boost::shared_ptr<Base> BasePtr;
typedef boost::shared_ptr<Derive> DerivePtr;
BasePtr pb=DerivePtr(new Derive());
.............
ar & pb
..........
能通过编译,但不能好好儿运行。应改为
DerivePtr pd;
BasePtr pb=DerivePtr(new Derive());
.......
ar & pd;
ar & pb;
......
这里的先后次序很重要;
这就是serialization处理share_ptr多态的的问题。
尽管pd什么都没有,但很重要。 |
|