httpエンドポイントから大きなjsonファイルを解析してカスタムローカルクラスインスタンスに値をコピーするのは簡単なC++タスクです。 「シンプル」C++テクニックを使用したコードの簡略化
このコードはある(例えば、以下のコードではセッターsetField1
、setField2
、などとobj
である)が、JSONレスポンスは、同じことを非常に大きなC++ファイルに巨大で、結果。しかし、考慮すべき事項がいくつかあります。つまり、タイプとセッターのメソッド名が異なります。以下は3つのケース(int、bool、double)ですが、私のコードには少なくとも50種類あります。コードを近代化し、エラーを起こしにくくし、コードの行数を減らすにはどうすればいいですか?
if (item_[i].HasMember("field1") && item_[i]["field1"].IsDouble()) {
double v = item_[i]["field1"].GetDouble();
if (v < 0)
throw CustomException("field1 value invalid");
obj.setField1(v);
} else {
throw CustomException("field1 missing or wrong data type");
}
if (item_[i].HasMember("field2") && item_[i]["field2"].IsBool()) {
bool v = item_[i]["field2"].GetBool();
obj.setField2(v);
} else {
throw CustomException("field2 missing or wrong data type");
}
if (item_[i].HasMember("field3") && item_[i]["field3"].IsInt()) {
int v = item_[i]["field3"].GetInt();
if (v < 0)
throw CustomException("field3 value invalid");
obj.setField3(v);
} else {
throw CustomException("field3 missing or wrong data type");
}
これらの 'IsInt'、' GetInt'メソッドは 'Is'と 'Get 'メソッドとして取得できますか?その後、それはかなり些細なことだろう。 –
nvoigt
これは、[コードレビューの要件]を考慮せずに同じ正確な質問をクロス投稿したためです(http://meta.codereview.stackexchange.com/questions/5777/a-guide-to-code-review-for-stack -overflow-users)。スタックオーバーフローは一般的な質問です。コードレビューには実際のコードが必要です。 –
'' item_ [i] ["fieldName"] 'をそのフィールドを持たないアイテムに対して実行するとどうなりますか?もう一歩、 'bool'以外のフィールドで' GetBool() 'を呼び出すとどうなりますか?答えはどちらの場合でも "例外"になると思いますが、コードを一連の 'obj.setFieldN(item_ [i] [" fieldN "]。GetType());'あなたのカスタム例外をスローするための単一の 'try' /' catch'。 – Quentin