- 使用stl容器还有string时需要包含serialization库中封装过的头文件,不能直接使用容器原来的头文件。
-
保存非const对象时遇到编译时错误。比如如下的代码:
T t; // No problem if use "const T t;" std::ofstream ofs(filename); boost::archive::text_oarchive oa(ofs); oa << t; // Cause compile time error.
这个在boost serialization的文档中rationale下有说明,主要是因为Object tracking而引起的。Object tracking通过跟踪指针地址来防止对同一个对象的多次保存。我的解决办法是-
用
BOOST_CLASS_TRACKING(classname, boost::serialization::track_never)
宏来禁止对类的Object tracking。不过这样就失去了Object tracking的功能,如果通过指针来保存对象可能会产生问题。 -
需要保存或恢复对象的时候使用专门的函数。如:
template
这样就不会产生编译时错误了。不过我对C++的了解实在是太少了(实际使用的过程中感觉尤其明显),看了例子以后虽然知道这样做可以解决问题,但是不知道究竟是为什么。void save(const Obj& s, const char* filename) { std::ofstream ofs(filename); boost::archive::text_oarchive oa(ofs); oa << s; } template void restore(Obj& s, const char* filename) { std::ifstream ifs(filename); boost::archive::text_iarchive ia(ifs); ia >> s; }
-
用