我想写一个通用函数,使用模板,能够返回布尔,整数或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