C ++ функция с типом возвращаемого значения переменной, используя ‘auto’

Я пытаюсь написать функцию, которая возвращает различные типы в зависимости от оператора 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’

Есть ли способ заставить его работать?

Заранее спасибо.

3

Решение

Нет, функция может иметь только один тип возвращаемого значения.

Обратите внимание, что обработка возвращаемого типа функции должна происходить во время компиляции, но ваша функция использует значения, которые не могут быть известны до времени выполнения.

10

Другие решения

Вы можете вернуть тип стирания, такой как boost::any, который может хранить любой тип. Ваш код будет выглядеть так

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

По вопросам рекламы [email protected]