C++14 返回类型的模板enable_if

C++14 Template enable_if return type

本文关键字:enable if 返回类型 C++14      更新时间:2023-10-16

我有以下代码 女巫获取一个值并返回一个介于 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);

提前谢谢。

您可以使用

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

使定义的类型T而不是void