变量作为文档索引
variable as document index
我正在使用rapidjson库来解析json数据。
例如,为了读取一个元素,我使用以下代码:
Document d;
d.Parse(json); //Parse JSON data
d["name"].Accept(writer)
它将其发送到StringBuffer,StringBuffer允许我将数据作为字符串读取。但现在我正努力让这本书充满活力。现在我读取字段"name",但这可能有所不同。所以我想用一个变量来做这个,我试过这个:
String s = "name";
d[s].Accept(writer)
但这会导致错误
表达式必须具有整型或非量程枚举类型
我该如何解决这个问题?
当您调用d["name"]
时,由于c++运算符重载,我无法判断实际发生了什么,但"name"基本上是const char*
,而不是String。
所以我认为
const char* s = "name";
d[s].Accept(writer);
会更好用。
实际上,在c++中,标准运算符[]被定义为采用std::size_t。字符串不能强制转换为std::size_t,但任何指针(如const char*
(都可以。这就是所谓的"整数或无范围枚举"。
但对于映射类型,[]运算符可以取非整数值,例如复杂对象或其他任何值。但您的运算符[]的行为似乎与标准数组下标类似。
BTW:在rapidjson中(我刚刚检查了github源代码(,GenericDocument是一个具有运算符的GenericValue
GenericValue& operator[](const std::basic_string<Ch>& name) { return (*this)[GenericValue(StringRef(name))]; }
因此,您可以使用std::string
。
当我们不知道变量的类型时,很难回答这个问题。我假设d
是一个求解集合,它包含具有Accept函数的MyClass
类型的某些对象。
如果你想要这样的行为,你必须使用类似std映射的东西。
它是这样使用的:
// The key type is string and the value type is myClass
// key value
map<string, MyClass> myDict;
myDict["name"].Accept(writer);
现在,您可以拥有一个与MyClass关联的字符串。
顺便说一句,string
从小写开始。编译器找不到String
。
编辑:啊!d
的类型是json文档!如果你想像这样操作json文档,你必须使用一个外部库,比如jsoncpp
编辑:似乎您已经使用了json库。
- 正在查找文档以获得PS4平台的C++中的设备信息
- 如何在文档文件夹中创建目录
- 当Microsoft文档仅包含 C# 示例时,如何查找 C++ 包含文件名
- 通过构造函数创建一些值并尝试添加到文档中使用 rapidjson 不起作用
- 关于类的 Python 文档 - 对C++的引用不正确
- C++/autoconf 等效于文档库要求.txt的要求是什么?
- mbed:使用 USB 文档库编译会导致错误
- C++ VISUAL STUDIO:GLFWwindow没有初始化,即使它是在文档中编写的并且以前工作过
- 使用 yaml-cpp 更新 YAML 文档的节点和值
- 在加载 MSHTML 文档之前从 MSHTML 文档中删除无效的 URL
- 如何在C++中表示JSON文档的递归对象结构?
- 如何查找 Redshift Maya API 文档?
- 如何使用值模板编写文档测试用例?
- 如何使用 Gradle DSL(领域特定语言)上的文档?
- ncurses 找不到任何关于cchar_t的文档
- 提取狮身人面像文档中的C++代码片段
- 关于 API 文档和设备操作 在助手-sdk-cpp 上
- curl通过c++请求索引solr文档
- 倒排索引:在一组文档中查找短语
- 变量作为文档索引