使用 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) 似乎是方框内出现问号的原因。

阅读文档的这些页面对我没有太大帮助:

从我读到的内容来看,我应该做的是正确的,但很可能我阅读这些类型的文档的经验不足是这里的一个问题。有谁知道我做错了什么或遗漏了什么?

我最终在这个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);
}