2017-10-30 96 views
0

나는 HDD를 게임에 사용하기 위해 레벨 정의 파일을 구문 분석하는 데 rapidson을 사용하려고합니다.rapidjson을 사용하여 json에서 작업 목록 구문 분석

레벨 정의는 기본 동작과 여러 가지 다른 동작으로 구성됩니다.

저는 작업 유형에 따라 다른 팩토리를 생성 할 팩터 리를 만들려고합니다.

예를 들어, JSON :

{ 
    "actions": [ 
     { 
      "type": "load-board", 
      "action": { 
       "id": "level_1.1.1", 
       "rows": 1, 
       "columns": 1, 
       "movements": 1, 
       "gameBoard": [ 
        0 
       ] 
      } 
     } 
    ] 
} 

하지만이 초기화 상태에서 아무것도, 이동 액션을 위해로드 보드를 할 수 있습니다.

나는 각 액션을 std :: future에서 실행될 다른 액션 클래스로 캡슐화하고 싶다.

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; 
} 

답변

0
내가 const를 문자 *

apidjson::StringBuffer sb; 
rapidjson::Writer<rapidjson::StringBuffer> writer(sb); 
document["action"].Accept(writer); 
sb.GetString(); 

로 변환이 코드를 사용하여 종료

를하지만의 일반적인 구현을 갖는 방법이 없습니다 rapidjson 코드를 수정하지 않고이 GetString