将 Boost 与吸气手和二传手一起使用

Using Boost with getters and setters?

本文关键字:二传手 一起 Boost      更新时间:2023-10-16

我想序列化一个我没有写访问权限的类。 即,我无法更改源文件或头文件。此外,大多数字段都是私有的,可通过 getter 和 setter 函数访问。

谁能告诉我创建不同的保存和加载函数是否是一个好主意(或不是)(如 boost 教程中所述)......

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(...),如果这就是它所需要的。 如果没记错的话,我不得不分成 2 个函数,因为我__gnu_cxx::hash_map几年前的支持不是很好,所以我围绕它做了一些黑客来序列化数据。

本教程让你继续前进,但它有点缺乏,每次使用 Boost.Serialization 时我都会遇到某种困难。 不过,这是一个方便使用的库。