C++ 结构序列化
有一些消息结构。每个都可以序列化为字符串,也可以从字符串反序列化。 对于序列化部分,我使用重载操作符boost::serialization(据我所知)支持很少的表示:二进制、文本和XML。而且(AFAIK)扩展它来序列化其他任何东西(例如JSON(可能已经完成了,我不知道))也不难 如果你想重新发明轮子,你可以遵循boost::serialization的设计原则——很明显,以一种简化的方式(不支持链接对象,这在大多数情况下是不需要的)重新实现是非常容易的。但是看看你的代码,我认为你最好使用smth或者其他(已经测试过的)而不是你自己的序列化 很抱歉,您的设计远远不够好…boost::serialization(据我所知)支持的表示形式很少:二进制、文本和XML。而且(AFAIK)扩展它来序列化其他任何东西(例如JSON(可能已经完成了,我不知道))也不难 如果你想重新发明轮子,你可以遵循boost::serialization的设计原则——很明显,以一种简化的方式(不支持链接对象,这在大多数情况下是不需要的)重新实现是非常容易的。但是看看你的代码,我认为你最好使用smth或者其他(已经测试过的)而不是你自己的序列化C++ 结构序列化,c++,serialization,C++,Serialization,有一些消息结构。每个都可以序列化为字符串,也可以从字符串反序列化。 对于序列化部分,我使用重载操作符boost::serialization(据我所知)支持很少的表示:二进制、文本和XML。而且(AFAIK)扩展它来序列化其他任何东西(例如JSON(可能已经完成了,我不知道))也不难 如果你想重新发明轮子,你可以遵循boost::serialization的设计原则——很明显,以一种简化的方式(不支持链接对象,这在大多数情况下是不需要的)重新实现是非常容易的。但是看看你的代码,我认为你最好使用s
很抱歉,您的设计远远不够好…请使用Boost序列化: 有了这个图书馆,你的一切都会得到很好的照顾。例如,您可以将此函数添加到结构中:
void serialize(Archive & ar, const unsigned int version)
{
ar & a;
ar & b;
ar & c;
ar & d;
}
然后,您将能够通过执行以下操作进行序列化和反序列化:
boost::archive::text_oarchive oa(ofs);
// write class instance to archive
oa << g;
假设g
和newg
是您的结构
然后,您还可以更改为binary\u archive
或其他以节省空间,或text\u archive
以节省可读性
编辑:对于您的编辑,boost序列化将为您处理反序列化。只要您序列化到一个归档文件,您只需执行与该归档文件相反的操作即可创建归档文件,boost会将所有内容放回正确的位置
我不熟悉boost中的NVP和XML内容,因此,如果与之不同,我很抱歉 使用Boost序列化: 有了这个图书馆,你的一切都会得到很好的照顾。例如,您可以将此函数添加到结构中:
void serialize(Archive & ar, const unsigned int version)
{
ar & a;
ar & b;
ar & c;
ar & d;
}
然后,您将能够通过执行以下操作进行序列化和反序列化:
boost::archive::text_oarchive oa(ofs);
// write class instance to archive
oa << g;
假设g
和newg
是您的结构
然后,您还可以更改为binary\u archive
或其他以节省空间,或text\u archive
以节省可读性
编辑:对于您的编辑,boost序列化将为您处理反序列化。只要您序列化到一个归档文件,您只需执行与该归档文件相反的操作即可创建归档文件,boost会将所有内容放回正确的位置
我不熟悉boost中的NVP和XML内容,因此,如果与之不同,我很抱歉 反序列化要执行什么操作?如果给定字符串“{field1=1 | field2=2 | field3=1 | field4=abc}”,则可以将其反序列化为结构s。“字符串”是人类可读的吗?是的。实际上,字符串只是调用“cout boost serialize”的输出,不会使其成为人类可读的字符串,我相信它只是将字段的二进制文件填充到线路上。快速编辑:它有一个返回字符串版本的函数。要反序列化怎么办?字符串“{field1=1 | field2=2 | field3=1 | field4=abc}”,则可以将其反序列化为结构s。该“字符串”是否可读?是。实际上,字符串只是调用的输出“cout boost serialize不会让它成为一个人类可读的字符串,我相信它只是将字段的二进制文件塞进了电线上。快速编辑:它有一个返回字符串版本的函数。同意--“永不重新发明轮子”是一项重要的编程原则。同意--“永不重新发明轮子”是一项重要的编程原则
boost::archive::text_iarchive ia(ifs);
// read class state from archive
ia >> newg;