可以在函数声明中使用“auto”吗?

Can ‘auto’ be used in a function declaration?

背景:

我找到了这个方便的随机数生成器,想为它制作一个 header 文件: 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 中,具有 return 类型“auto”的函数声明需要尾随 return 类型,以便编译器可以确定类型是什么。 例如:

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

问题:

看来我的 header 需要几乎与函数本身一样长才能确定类型:

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

问题:

有没有办法确定使用“auto”类型的函数声明(在 header 中)的完整 return 类型? 如果不是,我的 dice() header 应该是什么样子?

由于您使用 int 作为 std::uniform_int_distribution 的模板类型,distribution(generator) 的 return 类型是 int。除非真正的代码也被模板化,否则 return 类型可以被硬编码为 int.

如果真正的代码是模板化的,那么您可以使用 std::uniform_int_distributionresult_type 成员:

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

或者只是模板类型本身:

template<typename T>
T roll();