使用 rapidjson 从 json 解析操作列表
Parsing an action list from json using rapidjson
我正在尝试使用rapidson来解析我在HDD中为游戏准备的关卡定义文件。
级别定义由基本操作和内部几个但不同的操作组成。
我正在尝试建立一个工厂,该工厂将根据操作的类型创建不同的操作。
示例 JSON:
{
"actions": [
{
"type": "load-board",
"action": {
"id": "level_1.1.1",
"rows": 1,
"columns": 1,
"movements": 1,
"gameBoard": [
0
]
}
}
]
}
但它可以是任何东西,从初始化状态到移动动作,再到负载板。
我想将每个动作封装到不同的动作类中,这些动作类将在 std::future 中执行。
但是我的工厂与我在 Java 中所能做的相去甚远,似乎并非易事,因为传递 rapidjson::GenericValue
将无济于事,因为我需要传递模板所需的参数 .GetString() 方法没有正确的实现。
您是否曾经实现过委派工厂来创建不同的对象和操作?
这是我所期望的:
std::vector<LevelAction *> * GameBoardJsonPacker::unpackLevelActionsJson(std::string json)
{
std::vector<LevelAction *> * levelActions = new std::vector<LevelAction *>();
rapidjson::Document document;
document.Parse<0>(json.c_str());
auto actions = document["actions"].GetArray();
for(int i = 0; i < actions.Size(); i++)
{
levelActions->push_back(LevelActionFactory::getLevelAction(actions[i].GetString())); //here fails
}
return levelActions;
}
我最终使用此代码转换为常量字符*
apidjson::StringBuffer sb;
rapidjson::Writer<rapidjson::StringBuffer> writer( sb );
document["action"].Accept( writer );
sb.GetString();
但是如果不修改 rapidjson 代码,就无法拥有此 GetString 的通用实现
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- Pybind11:将元组列表从Python传递到C++
- 从push_front操作中获取常规 MPL 列表
- 如何让迭代器使用赋值运算符对列表进行操作
- 自定义张量流操作获取可变输入张量的列表
- 操作可变参数模板参数列表
- 成员初始化器列表中的分配操作
- C 在给定列表中执行每种类型的操作
- 使用 rapidjson 从 json 解析操作列表
- 如何在C 中的用户提交变量列表中执行多个操作
- Python扩展在操作大列表时会创建无效指针
- C++列表迭代器如果列表更改则重新启动操作
- C++中的递归列表操作
- 在 UML 中使用变量参数列表的操作
- Rcpp犰狳:对列表元素的"-="操作
- 使用语义操作分析逗号分隔的范围和数字列表
- 构造函数初始化列表vs昂贵操作
- 操作迭代器列表+指针
- 如何在MITK中访问图像属性列表和操作
- 如何根据列表中的对象的运行时类型而不是基本类型对其进行操作