1

我想序列化一个我没有写权限的类。即,我无法更改源文件或头文件。此外,大多数字段都是私有的,可以通过 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++ 和序列化的新手,我非常感谢任何提示!

最好的,亚历克斯

编辑:添加了提升教程的链接

4

2 回答 2

1

这是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 时都会遇到一些困难。这是一个方便使用的库。

于 2012-08-09T15:26:27.957 回答
1
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 函数设置为成员。

于 2012-08-09T15:24:02.450 回答