You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法在rapidjson中使用std::string创建成员?求正确实现方式

RapidJSON中使用std::string创建成员的正确方式

RapidJSON的AddMember方法无法直接接收std::string作为值参数,因为它要求传入rapidjson::Value类型的对象,下面是两种正确的实现方式:

方式一:使用StringRef引用原字符串

这种方式不会拷贝字符串内存,只是引用原std::string的内容,需要确保原字符串在Document的生命周期内始终有效:

rapidjson::Document details;
details.SetObject();
std::string s = "kjfhgdkgjhfkjfhj";

// 完整写法,指定字符串指针和长度
details.AddMember("farm", rapidjson::StringRef(s.c_str(), s.size()), details.GetAllocator());

// 简化写法(若你的RapidJSON版本支持直接传入std::string)
details.AddMember("farm", rapidjson::StringRef(s), details.GetAllocator());

方式二:将字符串拷贝到Document内存中

如果需要脱离原std::string的生命周期(比如原字符串会被提前销毁),可以把字符串内容拷贝到RapidJSON的分配器管理的内存中:

rapidjson::Document details;
details.SetObject();
std::string s = "kjfhgdkgjhfkjfhj";

// 先构造Value并完成拷贝
rapidjson::Value val(s.c_str(), details.GetAllocator());
details.AddMember("farm", val, details.GetAllocator());

// 更简洁的链式写法
details.AddMember(
    "farm", 
    rapidjson::Value(s.c_str(), details.GetAllocator()).Move(), 
    details.GetAllocator()
);

内容的提问来源于stack exchange,提问作者Ed Heal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:20:33