Разбор списка действий из json с использованием rapidjson
Я пытаюсь использовать Rapidson для анализа файла определения уровня, который у меня есть на жестком диске для игры.
определение уровня состоит из базовых действий и нескольких, но разных действий внутри.
Я пытаюсь создать Фабрику, которая будет создавать различные типы действий на основе типа действия.
Пример JSON:
{
"actions": [
{
"type": "load-board",
"action": {
"id": "level_1.1.1",
"rows": 1,
"columns": 1,
"movements": 1,
"gameBoard": [
0
]
}
}
]
}
но это может быть что угодно, от init-state, до move-action, до load-board.
Я хочу инкапсулировать каждое действие в разные классы действий, которые будут выполняться в 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;
}
1 ответ
В итоге я использовал этот код для преобразования в const char *
apidjson::StringBuffer sb;
rapidjson::Writer<rapidjson::StringBuffer> writer( sb );
document["action"].Accept( writer );
sb.GetString();
но нет способа иметь общую реализацию этого GetString без изменения кода quickjson