【问题标题】:C++ function with variable return type using 'auto'使用'auto'的具有可变返回类型的C++函数
【发布时间】:2015-03-06 11:01:06
【问题描述】:

我正在尝试编写一个根据 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. 警告:“parseParameterValue”函数使用“auto”类型说明符,没有尾随返回类型
  2. 第二次返回时出错:'auto' 的扣除不一致:'int' 然后是 'double'

有没有办法让它工作?

提前致谢。

【问题讨论】:

  • 返回类型推导仅在编译时起作用。你需要像boost::any 这样的东西。
  • 不,它不是那样工作的。使用auto compiler 会推断出正确的返回类型,但它必须是一致的(除非你想使用QVariant...)
  • @AdrianoRepetti 非常感谢!我完全忘记了QVariant - 这应该对我有用。

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


【解决方案1】:

不,一个函数只能有一种返回类型。

请注意,函数返回类型的处理必须在编译时进行,但您的函数使用的值要到运行时才能知道。

【讨论】:

    【解决方案2】:

    您可以返回一个擦除类型,例如boost::any,它可以存储任何类型。您的代码将如下所示

    boost::any parseParameterValue(QString aParameterValueString, int aParameterType)
    {
        switch(aParameterType) {
        default: return {aParameterValueString};
        case 0:  return {aParameterValueString.toInt()};
        case 1:  return {aParameterValueString.toDouble()};
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多