【发布时间】:2017-10-30 16:08:47
【问题描述】:
我正在尝试使用 rapidson 来解析我在游戏硬盘中的关卡定义文件。
关卡定义由一个基本动作和内部的几个但不同的动作组成。
我正在尝试创建一个工厂,该工厂将根据不同操作的类型进行创建。
示例 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;
}
【问题讨论】: