【发布时间】:2018-01-26 20:51:23
【问题描述】:
为什么在这里引用非常量?
template<class T>
const nvp< T > make_nvp(const char * name, T & t);
我问的原因是我有一个带有公共字段的结构,我需要将它们设为私有并使用访问器。所以我想知道是否允许我使用临时变量并将它们传递给make_nvp,或者我需要与我的序列化程序和数据结构交朋友。
// option 1
auto a = data.getA();
ar & make_nvp("A", a);
// option 2
ar & make_nvp("A", data._a); // _a is private, but serializer is friend
我不知道这个ar 是什么,因为它是一个模板化的参数,所以在某些情况下它可以利用这个非常数并将其保存以备后用,然后option 1 是有问题的。
【问题讨论】:
-
在 boost 存档中,您可以使用单个函数进行序列化和反序列化。这是通过使用存档作为模板参数来实现的——它可以是序列化结构的输出存档或加载结构的输入存档。对于反序列化,函数需要一个非常量引用来存储反序列化的值,这就是为什么
make_nvp需要一个非常量引用。 -
@pschill 我喜欢你的评论。你可能想变成一个答案,我会接受它。
标签: c++ boost boost-serialization