C++ C++;和RapidJson:定义没有文档的值
我使用Rabijson解析我的C++应用程序中的JSON文件。 在我的json文件中有一个浮点值数组:C++ C++;和RapidJson:定义没有文档的值,c++,json,rapidjson,C++,Json,Rapidjson,我使用Rabijson解析我的C++应用程序中的JSON文件。 在我的json文件中有一个浮点值数组:threshs=[0.2,0.3]。 此数组存储为设置类的属性。类型为常量值*。如果需要访问数据,我可以调用(*设置->阈值)[I].GetFloat() 如果解析时出错,我希望使用在Settings.h中设置的默认值。这对于浮点、整数、布尔…来说非常有效。 问题是:如何在不创建文档的情况下手动创建常量值*。所以在我的头文件中,我想要s.th。比如: const Value* = {0.2, 0
threshs=[0.2,0.3]
。
此数组存储为设置
类的属性。类型为常量值*
。如果需要访问数据,我可以调用(*设置->阈值)[I].GetFloat()
如果解析时出错,我希望使用在Settings.h
中设置的默认值。这对于浮点、整数、布尔…
来说非常有效。
问题是:如何在不创建文档的情况下手动创建常量值*
。所以在我的头文件中,我想要s.th。比如:
const Value* = {0.2, 0.3};
这可能吗?
我唯一的解决方案是将
thresh
的类型更改为向量,并在解析时循环json数组并将值复制到向量中这段代码编译/运行时在我的设置中没有问题:
#include <iostream>
#include <rapidjson/allocators.h>
#include <rapidjson/document.h>
#include <rapidjson/prettywriter.h>
#include <rapidjson/rapidjson.h>
int main()
{
using namespace std;
using namespace rapidjson;
Value val(kArrayType);
//{
MemoryPoolAllocator alloc;
val.PushBack(Value(0.1).Move(), alloc);
val.PushBack(Value(0.2).Move(), alloc);
//}
Document doc;
doc.SetObject().AddMember("arr", val, doc.GetAllocator());
StringBuffer sb;
PrettyWriter<StringBuffer> writer(sb);
doc.Accept(writer);
cout << sb.GetString() << endl;
return 0;
}
顺便说一句,如果您取消对{
和}
的注释,则在添加值之前,分配器将被销毁,您将得到以下结果:
{
"arr": [
null,
null
]
}
好的一面是,它不会崩溃。这在文档中有解释:我看不到。我可以轻松创建空数组,但需要设置默认值。使用s.th。与此类似,a.PushBack(Value().SetInt(42),分配器)需要创建一个文档,而不需要使用文档的分配器。制作内存池分配器分配器分配器
并在回拨呼叫中使用它。只需确保它存在(您的分配器),至少在您向文档添加值之前。值a(kArrayType)给出的“kArrayType”不是类型。我设置了“using namespace rapidjson”和“include”、“include”谢谢!现在可以了:)
{
"arr": [
null,
null
]
}