我正在使用具有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");
最佳答案
为什么不只编写一堆静态的Get函数(GetInt / GetDouble ...)来验证输入,返回适当的类型结果,如果不是该类型则抛出异常?