Можно ли использовать auto в объявлении функции? - PullRequest
0 голосов
/ 13 ноября 2018

Справочная информация:

Я нашел этот удобный генератор случайных чисел и хотел создать для него файл заголовка: http://www.cplusplus.com/reference/random/

std::default_random_engine generator;
std::uniform_int_distribution<int> distribution(1,6);
auto dice = std::bind ( distribution, generator );
int wisdom = dice()+dice()+dice();

Однако в C ++ 11 для объявления функции с типом возврата «auto» требуется конечный тип возврата, чтобы компилятор мог решить, что это за тип. E.g.:

auto foo(int a, int b) -> decltype(a*b);

Проблема:

Похоже, мой заголовок должен быть почти таким же длинным, как сама функция, чтобы определить тип:

std::default_random_engine generator;
std::uniform_int_distribution<int> distribution(1,6);
auto roll() -> decltype(distribution(generator));

Вопрос:

Есть ли способ определения полного возвращаемого типа для объявления функции (в заголовке), в котором используется тип "auto"? Если нет, то как должен выглядеть мой заголовок dice ()?

1 Ответ

0 голосов
/ 13 ноября 2018

Поскольку вы используете int в качестве типа шаблона для std::uniform_int_distribution, тип возвращаемого значения distribution(generator) равен int. Если реальный код также не шаблонизирован, тип возвращаемого значения может быть жестко задан как int.

А если реальный код является шаблонным, то вы можете использовать result_type член std::uniform_int_distribution:

template<typename T>
typename std::uniform_int_distribution<T>::result_type roll();

Или просто сам тип шаблона:

template<typename T>
T roll();
...