C++ 使用RapidJson其AddMember函数的函数的输入出现问题
我正在尝试编写一个函数来检查文档中是否存在成员。如果这样做,则应删除该成员并使用其他值重新添加它 这是我到目前为止得到的(d是一个C++ 使用RapidJson其AddMember函数的函数的输入出现问题,c++,c++11,rapidjson,C++,C++11,Rapidjson,我正在尝试编写一个函数来检查文档中是否存在成员。如果这样做,则应删除该成员并使用其他值重新添加它 这是我到目前为止得到的(d是一个rapidjson::Document): 这将编译并运行,但输出不符合预期: 如图所示,rapidjson::StringRef(成员)似乎是方框内出现问号的原因 阅读这些文档对我帮助不大: 从我读到的内容来看,我应该做得正确,但很可能我没有阅读这些类型文档的经验,这是一个问题。有人知道我做错了什么或遗漏了什么吗?我最终在这篇文章中找到了答案: 使用动态引
rapidjson::Document
):
这将编译并运行,但输出不符合预期:
如图所示,rapidjson::StringRef(成员)
似乎是方框内出现问号的原因
阅读这些文档对我帮助不大:
从我读到的内容来看,我应该做得正确,但很可能我没有阅读这些类型文档的经验,这是一个问题。有人知道我做错了什么或遗漏了什么吗?我最终在这篇文章中找到了答案: 使用动态引用时,字符串的副本应存储在
rapidjson::Value
中
这使得代码如下所示:
void addMemberWithoutDuplication(std::string member, rapidjson::Value val) {
if (d.HasMember(member)) {
d.RemoveMember(member);
}
rapidjson::Value key(member.c_str(), allocator);
d.AddMember(key, val, allocator);
}
StringRef
中的Ref
在引用局部变量时可疑。尝试通过深度复制添加此成员。不能执行d[member]=val代码>?@rafix07您能给我举个例子说明如何做到这一点吗。我对C++使用互联网很陌生,我发现在上下文中使用“深度副本”这个词很难得到一个例子。在下面的部分中:移动语义和临时值,并使用代码<值> /Cuffo>类使用。
void addMemberWithoutDuplication(std::string member, rapidjson::Value val) {
if (d.HasMember(member)) {
d.RemoveMember(member);
}
rapidjson::Value key(member.c_str(), allocator);
d.AddMember(key, val, allocator);
}