使用boost的archive做可变长度的网络消息数据打包

使用boostarchive做可变长度的网络消息数据打包

 

目的

在结构体上面可以定义std::string这样的数据,并方便打包与解包

 

核心

1.         boost库提供了非常方便的对像序列化库boost::archiveboost::serialization,通过这两个库我们可以很方便的打包std里面像std::stringstd::list这些类型的数据。

2.         打包数据我们当然要使用二进制的方式所以使用boost::archive::binary_iarchiveboost::archive::binary_oarchive

3.         在真正编写代码的过程中发现这两个类为了序列化出来的数据有版本的区分还在输出的数据最前面加上一些版本信息,为了去除它们,最终我的解决方案是重写这两个类,将输出版本信息这块代码给关闭掉。

4.         boost的序列化方法是在结构体上面做一个函数(全局的不提了),如下:

struct data

{

std::string v;

int v2;

template<class Archive>

void serialize(Archive & ar, const unsigned int version)

{

    ar & v;

    ar & v2;

}

};

程序员总有一个通病“懒”,看到这样的代码就在想能不能将serialize函数给去掉或者让计算机自动生成,分析了很多,最后的解决方法是使用宏来处理在代码里可以看到MSG1MSG2…MSG9这样的宏,它们就是为了完成这个想法而做的东西,很丑!!!(哪位有好的解决方法请一定要告知我,非常感谢)

5.         为了做到使用更加方便,简单做了MsgPackMsgUnpack类来做打包与解包工作。

 

代码

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值