我正在使用第三方 C++ 库,它有一个 json 解析类,它具有不同的功能,如下所示:
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");