1

配列の json 表現を std::vector にデシリアライズする関数を書きたいと思います。私が使用している json ライブラリは、Facebook の愚かなライブラリの一部です。次のようなことを達成したいのですが、残念ながらうまくいきません。

template<typename T>
static bool deserializeHelper(std::string fieldName, vector< T >& structField, const folly::dynamic& jsonObj) {        
    if(auto* jsonField = jsonObj.get_ptr(fieldName)){
        if(jsonField->isArray()) {
           for(auto& elem : *jsonField) {
               if(elem.isInt()) {
                   structField.push_back(elem.asInt());
               } else if(elem.isString()){
                   structField.push_back(elem.asString());
               } else if(elem.isDouble()) {
                   structField.push_back(elem.asDouble());
               } else if(elem.isBool()) {
                   structField.push_back(elem.asBool());
               } else return false;
           }
        } else return false;
    }

    return true;
}

上記のコードでは、jsonField は配列フィールドの表現です。したがって、コードは配列をループしようとします。次に、各要素に対して。ジェネリック ベクトル: ベクトルにプッシュ バックしようとします。問題は、std::string から int にキャストできないと不平を言うため、コードをコンパイルできないことです。T=int の場合。

4 つのメソッドのオーバーロード関数を実装する必要なしに、そのような汎用関数を作成する方法がわかりません。static bool deserializeHelper(std::string fieldName, vector< int >& structField, const folly::dynamic& jsonObj) ....

ありがとう。

4

2 に答える 2