繁体   English   中英

使用带有getter和setter加速?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM