我想寫一個通用函數,使用模板,能夠返回布爾,整數或char *或字符串。從C++中的模板函數返回字符串和整數
template<typename entryType>
entryType getEntry(xml_node node, const char* entryKey)
{
...
if (is_same<entryType, bool>::value) {
return boolvalue; //returning a boolean
}
else if(is_same<entryType, int>::value) {
return a; //this is an integer
}
else if (is_same<entryType, char*>::value) {
return result; //this is a char*
}
}
,我希望能夠調用它像:
bool bPublisher = getEntry<bool>(node, "Publisher");
int QoS = getEntry<int>(node, "QualityOfService");
char* sBrokerUrl = getEntry<char*>(node, "BrokerUrl");
作爲字符*替代,一個字符串也將是罰款:
string sBrokerUrl = getEntry<string>(node, "BrokerUrl");
我得到錯誤,如:「不能從'bool'轉換爲'char *'我理解這個問題,編譯器無法檢測到代碼執行分支取決於我給的類型,我只是找不到解決方案任何人都可以幫助我嗎? NKS。
那麼,你不能用普通的'if'語句來做到這一點。 –
如果語句 –
需要專門化模板,則不能依賴運行時的返回類型。畢竟,一旦編譯完成,tempalte就成爲一個返回類型明確的普通函數 – user463035818