我想寫一個將數組的json表示反序列化爲std :: vector的函數。我使用的json庫是Facebook的愚蠢庫的一部分。我想實現像下面出頭,但遺憾的是它不工作:模板函數類型在運行時爲json反序列化轉換
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方法重載函數。 靜態布爾deserializeHelper(的std :: string fieldName的,矢量< int>的& structField,常量愚蠢::動態& jsonObj)....
感謝。
也許使用boost庫的'boost :: variant'類型而不是'std :: vector'可以幫助:http://www.boost.org/doc/libs/1_59_0/doc/html/variant.html –