我正在尝试编写一个根据if语句返回各种类型的函数。
auto parseParameterValue(QString aParameterValueString, int aParameterType)
{
if(aParameterType == 0)
{
int result = aParameterValueString.toInt();
return result;
}
else if(aParameterType == 1)
{
double result = aParameterValueString.toDouble();
return result; // <------- compilation error
}
else
{
return aParameterValueString;
}
}
不幸的是,我得到的是:
- 警告:"parseParameterValue"函数使用"auto"类型说明符而不使用尾随返回类型
- 第二次返回时出错:"自动"的扣除不一致:"int",然后是"double"
有没有办法让它工作?
提前谢谢。
不,一个函数只能有一个返回类型。
请注意,函数返回类型的处理必须在编译时进行,但函数使用的值在运行时之前无法知道。
您可以返回可以存储任何类型的擦除类型,例如 boost::any
。然后,您的代码将如下所示
boost::any parseParameterValue(QString aParameterValueString, int aParameterType)
{
switch(aParameterType) {
default: return {aParameterValueString};
case 0: return {aParameterValueString.toInt()};
case 1: return {aParameterValueString.toDouble()};
}
}