无法在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
相关产品推荐
相关产品推荐

