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

时间:2018-11-13 07:10:44

标签: c++11 header-files forward-declaration auto function-declaration

背景:

我找到了这个方便的随机数生成器,并想为其创建头文件: 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'的函数声明需要尾随返回类型,以便编译器可以确定该类型是什么。 例如:

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));

问题:

是否可以确定使用“自动”类型的函数声明的完整返回类型(在标头中)? 如果没有,我的dice()标头应该是什么样?

1 个答案:

答案 0 :(得分:0)

由于您将int用作std::uniform_int_distribution的模板类型,因此distribution(generator)的返回类型为int。除非还对真实代码进行了模板化,否则返回类型可以硬编码为int

如果真实代码是模板化的,则可以使用std::uniform_int_distributionresult_type成员:

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

或者只是模板类型本身:

template<typename T>
T roll();