[英]Using Boost with getters and setters?
我想序列化一个我没有写权限的类。 即,我无法更改源文件或头文件。 此外,大多数领域是私人和通过getter和setter函数进行访问。
谁能告诉我它是否是一个好主意(或不)只是为了保存和加载(如解释创建不同的功能提升教程 )...
template<class Archive>
void save(Archive & ar, gps_position &g, const unsigned int version) const
{
// note, version is always the latest when saving
ar & g.deg;
ar & g.min;
}
template<class Archive>
void load(Archive & ar, gps_position &g, const unsigned int version)
{
if(version > 0)
ar & g.deg;
ar & g.min;
}
BOOST_SERIALIZATION_SPLIT_MEMBER()
...还有使用公共职能:
ar & g.getDeg();
代替
ar & g.deg;
(二传手类似)? 我真的很新成C ++和系列化,我现在没有任何线索非常感谢!
最好,亚历克斯
编辑:添加了链接以增强教程
template<class Archive>
void load(Archive & ar, gps_position &g, const unsigned int version)
{
if(version > 0)
{
int d = 0;
ar & d;
g.setDeg(d);
int m = 0;
ar & m;
g.setMin(m);
}
}
这样的事情。 声明变量->从存档中读取->通过调用setter函数设置为成员。
这是OP在谈论的教程:
http://www.boost.org/doc/libs/1_50_0/libs/serialization/doc/tutorial.html
我发现有时使用拆分功能是必要的,并且在必要时也不错。 使用单个void serialize(...)
函数确实很方便,但是当无法更改要尝试序列化的类时(如您遇到的问题),我不得不将它们拆分。 如果要这么做,我绝对不会回避将void serialize(...)
分为void save(...)
和void load(...)
。 如果内存对我来说没问题,几年前我就不得不将其分成两个函数,因为__gnu_cxx::hash_map
支持不是很好,因此我对其进行了一些修改以使数据序列化。
本教程可以助您一臂之力,但是它有点不足,每次使用Boost.Serialization时都会遇到某种困难。 这是一个方便使用的库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.