我正在使用具有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 ...)来验证输入,返回适当的类型结果,如果不是该类型则抛出异常?

10-08 08:21