序列化(boost serialization)

--类内部定义序列化方法

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <string>
#include <fstream>

struct employee
{
    int         id;
    int         age;
    std::string name;
    employee()
        :id(0),age(0),name("") {}
    employee(int id_,int age_, std::string name_) :id(id_),age(age_),name(name_) {}

    template<class Archive>
        void serialize(Archive & ar, const unsigned int version)
        {
            ar & id;
            ar & age;
            ar & name;
        }
};
void save(const employee& es)
{
    std::ofstream ofs("data");
    boost::archive::text_oarchive oa(ofs);
    oa << es;
}

void load(employee& es)
{
    std::ifstream ifs("data");
    boost::archive::text_iarchive ia(ifs);
    ia >> es;
}

int main(int argc, char ** argv)
{
    employee e1(10,20, "123131");
    save(e1);
    employee e2;
    load(e2);
    return 0;
}

编译:

g++ t.cpp -lboost_serialization

执行结果:

22 serialization::archive 10 0 0 10 20 6 123131 

 

--类外部定义序列化方法

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <string>
#include <fstream>
struct employee
{
    int         id;
    int         age;
    std::string name;
    employee()
        :id(0),age(0),name("") {}
    employee(int id_,int age_, std::string name_) :id(id_),age(age_),name(name_) {}
};
namespace boost{
    namespace serialization{
        template<typename Archive>
            void serialize(Archive & ar, employee& t, const unsigned int version)
            {
                 ar & t.id;
                 ar & t.age;
                 ar & t.name;
            }
    }
}

void save(const employee& es)
{
    std::ofstream ofs("data");
    boost::archive::text_oarchive oa(ofs);
    oa << es;
}

void load(employee& es)
{
    std::ifstream ifs("data");
    boost::archive::text_iarchive ia(ifs);
    ia >> es;
}

int main(int argc, char ** argv)
{
    employee e1(10,20, "123131afadf");
    save(e1);
    employee e2;
    load(e2);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值