可以在函数声明中使用“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_distribution
的 result_type
成员:
template<typename T>
typename std::uniform_int_distribution<T>::result_type roll();
或者只是模板类型本身:
template<typename T>
T roll();
背景:
我找到了这个方便的随机数生成器,想为它制作一个 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_distribution
的 result_type
成员:
template<typename T>
typename std::uniform_int_distribution<T>::result_type roll();
或者只是模板类型本身:
template<typename T>
T roll();