首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么make_nvp需要非常数引用?

为什么make_nvp需要非常数引用?
EN

Stack Overflow用户
提问于 2017-08-18 16:28:55
回答 2查看 114关注 0票数 0

为什么在这里引用非常数?

代码语言:javascript
运行
复制
template<class T>
const nvp< T > make_nvp(const char * name, T & t);

我这样问的原因是,我有一个带有公共字段的结构,我需要将它们设为私有,并使用访问器。所以我想知道是否允许我使用临时变量并将它们传递给make_nvp,或者我需要让我的序列化程序更好地使用数据结构。

代码语言:javascript
运行
复制
// 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就会出现问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-18 16:49:26

在boost归档中,您可以使用单个函数进行序列化和反序列化。这是通过使用archive作为模板参数来实现的-它可以是序列化结构的输出存档,也可以是从某个文件加载结构的输入存档。对于反序列化,函数需要非常数引用来存储反序列化的值,这就是make_nvp需要非常数引用的原因。

回到您的问题:选项2更有意义,因为选项1打破了反序列化。

票数 3
EN

Stack Overflow用户

发布于 2017-08-18 16:45:12

选项1破坏了对象跟踪,只要不序列化任何指向data._a或其内部的指针就可以了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45752054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档