为什么在这里引用非常数?
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就会出现问题。
发布于 2017-08-18 16:49:26
在boost归档中,您可以使用单个函数进行序列化和反序列化。这是通过使用archive作为模板参数来实现的-它可以是序列化结构的输出存档,也可以是从某个文件加载结构的输入存档。对于反序列化,函数需要非常数引用来存储反序列化的值,这就是make_nvp需要非常数引用的原因。
回到您的问题:选项2更有意义,因为选项1打破了反序列化。
发布于 2017-08-18 16:45:12
选项1破坏了对象跟踪,只要不序列化任何指向data._a或其内部的指针就可以了。
https://stackoverflow.com/questions/45752054
复制相似问题