2017-10-30 15 views
0

私はHDD用のレベル定義ファイルを解析するためにrapidsonを使用しようとしています。jsonからのアクションリストの解析(rapidjsonを使用)

レベル定義は、内部の基本アクションといくつかの異なるアクションで構成されています。

私は、アクションの種類に応じて異なるものを作成するファクトリを作成しようとしています。

例のJSON:

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

が、それは移動アクションをするために、ロード・ボードに、INIT状態から、何もすることができます。

私は、各アクションをstd :: futureで実行される異なるアクションクラスにカプセル化したいと考えています。

rapidjson::GenericValueを渡すと、テンプレートに必要なパラメータを渡す必要があるため、私の工場では、Javaでできることとはまったく離れています.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

私は

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

*のconst char型に変換するには、このコードを使用して終了したがの一般的な実装を持つ方法はありませんこのGetStringは、rapidjsonコードを変更せずに

関連する問題