【问题标题】:C++14 Template enable_if return typeC++14 模板 enable_if 返回类型
【发布时间】: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++ templates c++14 sfinae


【解决方案1】:

你可以使用

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

使定义的类型为T 而不是void

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多