C++ 如何复制rapidjson::值?
我正在尝试将rapidjson::value复制到类成员中C++ 如何复制rapidjson::值?,c++,copy,rapidjson,C++,Copy,Rapidjson,我正在尝试将rapidjson::value复制到类成员中 error: ‘rapidjson::GenericValue<Encoding, <template-parameter-1-2> >::GenericValue(const rapidjson::GenericValue<Encoding, <template-parameter-1-2> >&) [with Encoding = rapidjson::UTF8<char
error: ‘rapidjson::GenericValue<Encoding, <template-parameter-1-2> >::GenericValue(const rapidjson::GenericValue<Encoding, <template-parameter-1-2> >&) [with Encoding = rapidjson::UTF8<char>; Allocator = rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>]’ is private
你知道如何简单地将rapidjson对象复制到类成员中,以便稍后对其进行分析吗?要深入复制rapidjson,你应该使用CopyFrom。您还应该为此副本提供一个分配器。因此,您的类成员将是分配器是有意义的,因此将其设置为rapidjson::Document类型,而不是rapidjson::Value(Document从Value继承) 此外,最好将json参数作为引用而不是值 因此,您的函数应该如下所示:
void setData(const rapidjson::Value& json) {
this->json.CopyFrom(json, this->json.GetAllocator());
}
而您的类成员应定义为:
rapidjson::Document json;
首先,为什么不将其作为引用传递?使用
const-rapidjson::Value&json
,或者删除该常量,但在复制它时将其声明为const毫无意义。我无法删除该常量,我无法控制该部分内容source@tobspr:为什么参数不应为常量?当然,如果它是引用,则更为重要,但如果参数是按值传递的,则仍然有意义。例如,这可防止(意外)修改功能参数。例如,当您打算编写此->json=foo时,json=foo。IMHO使用函数参数作为局部变量并修改其内容也是一种不好的做法。这通常会改变他们的意思,使他们的名字不正确。我记得这个问题。我最终解决它的方法是创建自己的JSON数据结构,然后将rapidjson复制到该数据结构中
rapidjson::Document json;