我试图根据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;
}
}
不幸的是,我得到的是:
- 警告:&#39; parseParameterValue&#39;功能使用&#39; auto&#39;没有尾随返回类型的类型说明符
- 第二次返回时出错:&#39; auto&#39;:&#39; int&#39;然后&#39; double&#39;
醇>
有没有办法让它发挥作用?
提前致谢。
答案 0 :(得分:10)
不,函数只能有一种返回类型。
请注意,函数返回类型的处理必须在编译时进行,但是您的函数使用的值在运行时才能知道。
答案 1 :(得分:3)
您可以返回可以存储任何类型的擦除类型,例如boost::any
。您的代码将如下所示
boost::any parseParameterValue(QString aParameterValueString, int aParameterType)
{
switch(aParameterType) {
default: return {aParameterValueString};
case 0: return {aParameterValueString.toInt()};
case 1: return {aParameterValueString.toDouble()};
}
}