有一些消息结构。每一个都可以被序列化为一个字符串并从一个字符串中反序列化。 对于序列化部分,我使用超载运算符< <。但是对于序列化的部分,我想不出一个合适的方法来做到这一点。所以我使用一个类来解析字符串。最近,我遇到了boost序列化。我不知道它是否可以达到这个目的,或者有更好的主意。struct serialization
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);
}
你想为反序列化做些什么? – 0x499602D2
给出了一个字符串“{field1 = 1 | field2 = 2 | field3 = 1 | field4 = abc}”,它可以被反序列化为struct s。 –
是人类可读的“字符串”吗? – Alex