【发布时间】:2013-01-21 03:06:53
【问题描述】:
有一些消息结构。每个都可以序列化为字符串并从字符串反序列化。 对于序列化部分,我使用重载运算符
struct S
{
int32_t type;
double a;
int32_t b;
bool c;
std::string d;
friend std::ostream& operator<< (std::ostream& os, const S& s)
{
os << "{field1" << "=" << s.a << "|";
os << "field2" << "=" << s.b << "|";
os << "field3" << "=" << s.c << "|";
os << "field4" << "=" << s.d << "}";
return os;
}
};
编辑:所以,我选择使用 xml 存档。但是,我还有另一个问题。由于有几种类型的消息由字段 msgtype 分类。反序列化时,如何指定要反序列化到哪个对象?是否需要手动搜索 msgtype 字段?
template <typename Archive>
void serialize(Archive &ar, const unsigned int version)
{
using boost::serialization::make_nvp;
ar & make_nvp("msgtype", type);
ar & make_nvp("field1", a);
ar & make_nvp("field2", b);
ar & make_nvp("field3", c);
ar & make_nvp("field4", d);
}
【问题讨论】:
-
反序列化要做什么?
-
给出一个字符串“{field1=1|field2=2|field3=1|field4=abc}”,可以反序列化为struct s。
-
“字符串”人类可读吗?
-
是的。实际上字符串只是调用“cout 的输出
-
boost serialize 不会使其成为人类可读的字符串,我相信它只会将字段的二进制文件塞到网络上。快速编辑:具有返回字符串版本的功能。
标签: c++ serialization