我使用的是其具有具有 不同的功能,這樣的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");
所以我不需要了,如果條件都沒有。理想我想看看有沒有東西,所以我 將能夠做到這一點:
int i = MyClass<int>::getValue(someObj, "intKey");
string s = MyClass<string>::getValue(someObj, "strKey");
模板專門化是一個很好的解決方案,因爲它提供了編譯時類型解析機制,而不是運行時類型檢查和分支。 – holtavolt
謝謝。我以前沒有使用過模板專業化。我會用這個。 – Nura