C ++ 14模板enable_if返回类型

时间:2017-02-08 00:15:27

标签: c++ templates c++14 sfinae

我有以下代码,它接受一个值并返回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);
}

我的问题是返回类型是无效的,我希望它是T。

enable_if是为了避免使用与此类似的另一个函数,但对于整数类型使用std :: uniform_int_distribution也存在同样的问题。

如何编写可以运行以下示例代码的函数:

auto BaseAngle = 10.0f;
//add a bit of randomness to the angle
BaseAngle += RandomGenerator::random(45.0f);

提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以使用

std::enable_if<!std::is_integral<T>::value, T>

将定义的类型设为T而不是void