В С++ можно ли получить возвращаемый тип функции, чтобы объявить переменную без вызова этой функции?

int myfun()
{
  return 42;
}

Я знаю, что могу написать

auto myvar = myfun();

но что, если я просто хочу объявить myvar (не используя общий typedef)?

the_type_returned_by_myfun myvar;

Что можно записать вместо the_type_returned_by_myfun?

Ответ 1

Вы можете использовать decltype.

decltype(myfun()) myvar;
// or
typedef decltype(myfun()) myfun_ret;
myfun_ret myvar2;

И если функция имеет параметры, вы можете создавать поддельные параметры с помощью std::declval.

#include <utility>

int my_other_fun(foo f);
typedef decltype(myfun(std::declval<foo>())) my_other_fun;

Ответ 2

decltype - ваш друг:

decltype(myfun()) myvar;

Ответ 3

Это задание decltype:

decltype(myfun()) myvar;