Может ли C ++ использовать локальные переменные внутри функции, тип которой автоматически выводится из типа, возвращаемого функцией?

Мой вопрос: скажем, я определяю функцию в C ++ (или в C). Есть ли что-нибудь похожее на C ++? авто или же decltype что я могу использовать внутри определения функции, чтобы объявить локальную переменную с типом, выведенным из возвращаемого типа функции, которую я определяю?

Пример:
Распространенным шаблоном кодирования в C и C ++ является

SomeType foo() {
SomeType x;
// ... do something to x ...
return x;
}

И я надеюсь сделать вывод о втором SomeType вместо того, чтобы вводить это явно.
Следующее не работает, но я надеялся, что смогу что-то сделать в этом духе

SomeType foo() {
decltype(return) x;  //<-- infer the function return type, which here is SomeType
// ... do something to x ...
return x;
}

Для простых возвращаемых типов это не имеет большого значения, но когда возвращаемые типы являются сложными (скажем, возвращаемый тип является классом шаблона с большим количеством шаблонных параметров), было бы неплохо (и менее подвержено ошибкам) ​​не повторять этот тип определение внутри функции.

Я также хотел бы не менять определение функции для достижения этой цели. Таким образом, хотя в приведенном выше примере это может работать, чтобы изменить SomeType к макросу, или, возможно, сделать Foo функция шаблона и SomeType параметр шаблона, на самом деле я смотрю, чтобы узнать, могу ли я вообще вывести тип конкретно из возвращаемого типа окружающей функции.

Может быть, ответ «нет, это невозможно», что справедливо, но я бы хотел узнать, так или иначе.

6

Решение

В C ++ 11:

SomeType foo()
{
decltype(foo()) x;

Выражение foo() имеет тот же тип, что и возвращаемое значение foo,

6

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


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