Мой вопрос: скажем, я определяю функцию в 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 параметр шаблона, на самом деле я смотрю, чтобы узнать, могу ли я вообще вывести тип конкретно из возвращаемого типа окружающей функции.
Может быть, ответ «нет, это невозможно», что справедливо, но я бы хотел узнать, так или иначе.
В C ++ 11:
SomeType foo()
{
decltype(foo()) x;
Выражение foo()
имеет тот же тип, что и возвращаемое значение foo
,