具有可变返回类型的C ++函数,使用' auto'

时间:2015-01-08 10:49:12

标签: c++ auto return-type-deduction

我试图根据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;
    }
}

不幸的是,我得到的是:

  
      
  1. 警告:&#39; parseParameterValue&#39;功能使用&#39; auto&#39;没有尾随返回类型的类型说明符
  2.   
  3. 第二次返回时出错:&#39; auto&#39;:&#39; int&#39;然后&#39; double&#39;
  4.   

有没有办法让它发挥作用?

提前致谢。

2 个答案:

答案 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()};
    }
}