次のようなさまざまな機能を持つjson解析クラスを持つサードパーティのC++ライブラリを使用しています。
GetInt
GetBool
GetString
GetDouble
このクラスにアクセスできるユーティリティ関数を書きたいと思います。私はこのようなことを考えています:
class <template T>
class MyClass {
static T getValue(ThirdPartyClass someObj, const string &key) {
if(someObj[key].IsDouble())
return someObj[key].GetDouble();
else if (someObj[key].IsString())
return someObj[key].GetString();
// ... (for other types)
}
}
このクラスの呼び出し元は、正しい戻り値の型を保持します。
しかし、これは醜いです。if 条件を回避できる方法はありますか (マクロ置換などを使用)。サードパーティ クラスには、IsXXTypeXX および対応する GetXXTypeXX 関数 (XXTypeXX は Int、Double、String、または Bool) があります。
たとえば、次の関数を呼び出すときの戻り値の型を知っています。
int i = getValue(someObj, "intKey");
string s = getValue(someObj, "strKey");
したがって、if条件はまったく必要ありません。理想的には、私は何かを持っているように見えるので、これを行うことができます:
int i = MyClass<int>::getValue(someObj, "intKey");
string s = MyClass<string>::getValue(someObj, "strKey");