配列の 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) ....
ありがとう。