使用 RapidJson 及其 AddMember 函数的函数的输入问题
Problems with input to a function that used RapidJson its AddMember function
我正在尝试编写一个函数来检查某个成员是否存在于文档中。如果是,则应删除该成员并使用不同的值重新添加它。
这是我目前得到的(d 是 rapidjson::Document
):
void addMemberWithoutDuplication(std::string member, rapidjson::Value val) {
if (d.HasMember(member)) {
d.RemoveMember(member);
}
d.AddMember(rapidjson::StringRef(member), val, allocator);
}
这会编译并运行,但输出与预期不同:
如图所示 rapidjson::StringRef(member)
似乎是方框内出现问号的原因。
阅读文档的这些页面对我没有太大帮助:
https://rapidjson.org/structrapidjson_1_1_generic_string_ref.html
https://rapidjson.org/classrapidjson_1_1_generic_object.html
从我读到的内容来看,我应该做的是正确的,但很可能我阅读这些类型的文档的经验不足是这里的一个问题。有谁知道我做错了什么或遗漏了什么?
我最终在这个post中找到了答案:https://github.com/Tencent/rapidjson/issues/261
使用动态引用时,字符串的副本应存储在 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);
}
我正在尝试编写一个函数来检查某个成员是否存在于文档中。如果是,则应删除该成员并使用不同的值重新添加它。
这是我目前得到的(d 是 rapidjson::Document
):
void addMemberWithoutDuplication(std::string member, rapidjson::Value val) {
if (d.HasMember(member)) {
d.RemoveMember(member);
}
d.AddMember(rapidjson::StringRef(member), val, allocator);
}
这会编译并运行,但输出与预期不同:
如图所示 rapidjson::StringRef(member)
似乎是方框内出现问号的原因。
阅读文档的这些页面对我没有太大帮助:
https://rapidjson.org/structrapidjson_1_1_generic_string_ref.html
https://rapidjson.org/classrapidjson_1_1_generic_object.html
从我读到的内容来看,我应该做的是正确的,但很可能我阅读这些类型的文档的经验不足是这里的一个问题。有谁知道我做错了什么或遗漏了什么?
我最终在这个post中找到了答案:https://github.com/Tencent/rapidjson/issues/261
使用动态引用时,字符串的副本应存储在 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);
}