将 Boost 与吸气手和二传手一起使用
Using Boost with getters and setters?
我想序列化一个我没有写访问权限的类。 即,我无法更改源文件或头文件。此外,大多数字段都是私有的,可通过 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 时我都会遇到某种困难。 不过,这是一个方便使用的库。
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- 如何将AERT_Allocate与 std:vector 一起使用
- 如何使我的 sizeof sum 结构与空参数包一起工作
- 将 Boost 与吸气手和二传手一起使用