Разбор списка действий из 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

Другие вопросы по тегам