c++11 - 可以在函数声明中使用“auto”吗?
问题描述
背景:
我找到了这个方便的随机数生成器,并想为它制作一个头文件: 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() 标头应该是什么样子?
解决方案
由于您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();
推荐阅读
- javascript - 如何在 Javascript 中将数据添加到图表中?
- javascript - 使用 Slice 或 Push 将值推送到数组中仍然返回 Undefined
- php - Laravel 没有创建 RegisterController
- javascript - javascript 返回并获取上一页 FINAL STATE
- javascript - 如何制作切换路由路径?
- facebook - 从 facebook ui 导出 csv 和使用 InsightAPI 之间的区别
- c++ - 程序并行 QThread 在应用程序退出时创建内存泄漏
- ruby-on-rails - Rails Graphql 解决错误:参数数量错误(给定 1,预期 3)
- c# - 试图在我自己的程序中注入一个库
- android - 如何抬起键盘上方的按钮