首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问 boost: serialization有关问题

2012-04-22 
请教 boost: serialization问题学习一个小时,能将简单的类进行序列化。我的问题是:1: 项目中有很多.cpp 和.

请教 boost: serialization问题
学习一个小时,能将简单的类进行序列化。

我的问题是:

1: 项目中有很多.cpp 和.h文件, 怎么将里面的类、member 都序列化?


2: 这些文件需要先zlib处理下, 但是从void serialize( class &, ....)里要看不到任何 zlib的,我该怎么设计,用哪种设

计模式?

3. 大牛要是有相关代码能参考下就好了,3q.

[解决办法]
方法1:用1楼的方法,写一个宏简化声明的步骤
方法2:写一个parser,分析源文件,然后自动生成对应代码
方法3:和1楼类似,用boost::fusion
先用fusion把各种struct变成fusion::sequence(类似tuple),然后利用fusion::for_each模板简化代码。
代码量和方法1查不多,还是比较可控的。
方法3代码:eigen是个数学库,网上下一个,只用头文件不用编译

C/C++ code
#pragma once#include <Eigen/Dense>#include <string>#include <boost/serialization/serialization.hpp>#include <boost/archive/text_oarchive.hpp>#include <boost/archive/text_iarchive.hpp>class Player {public:    Player(const std::string& name): mName(name),mPos(0,0){}    Player():mPos(0,0){}    void move(float x, float y) {        mPos += Eigen::Vector2f(x,y);        std::cout << mName << " move: " << "(" << x <<", " << y << ")" << std::endl;    }    std::string mName;    Eigen::Vector2f mPos;};//------------------------------------------// serialization functionstemplate<typename archive>struct serializer {    serializer(archive& ar):ar(ar) {}    template<typename T>    void operator()(T& o) const {        ar & o;  // assuming binary for example...    }    archive& ar;};template<typename archive, typename sequence>void my_serialize(archive& ar, sequence& v) {    boost::fusion::for_each(v, serializer<archive>(ar));}//------------------------------------------// serialization declarationsBOOST_FUSION_ADAPT_STRUCT(    Eigen::Vector2f,    (float&, x())    (float&, y()))BOOST_FUSION_ADAPT_STRUCT(    Player,    (std::string, mName)    (Eigen::Vector2f, mPos))#define MY_SERIALIZE(Type) \    template<class Archive> \    inline void serialize(Archive& ar , Type& v, const unsigned int version) { \        my_serialize(ar, v); }    namespace boost {    namespace serialization {        MY_SERIALIZE(Eigen::Vector2f);        MY_SERIALIZE(Player);    } // namespace serialization} // namespace boost 

热点排行