【发布时间】:2017-02-08 00:15:26
【问题描述】:
我有以下代码女巫接受一个值并返回一个介于 0 和该值之间的随机值:
template<typename T>
typename std::enable_if<!std::is_integral<T>::value>::type
RandomGenerator::random(T value) {
std::uniform_real_distribution<T> dist(0, value);
return dist(RandomGenerator::mt);
}
我的问题是返回类型是 void,我希望它是 T。
enable_if 是为了避免使用与此类似的另一个函数,但将 std::uniform_int_distribution 用于整数类型也有同样的问题。
如何编写一个可以运行以下示例代码的函数:
auto BaseAngle = 10.0f;
//add a bit of randomness to the angle
BaseAngle += RandomGenerator::random(45.0f);
提前致谢。
【问题讨论】:
-
如果您使用的是 C++14,那么您可以使用
std::enable_if_t<...>而不是typename std::enable_if<...>::type
标签: c++ templates c++14 sfinae