random: use decltype auto for wrapper functions
This commit is contained in:
parent
532bd3b706
commit
c7eb82c993
17
random.hpp
17
random.hpp
@ -91,17 +91,22 @@ namespace cruft::random {
|
|||||||
/// This is primarily a convenience helper around the uniform_distribution
|
/// This is primarily a convenience helper around the uniform_distribution
|
||||||
/// type.
|
/// type.
|
||||||
template <typename ValueT, typename GeneratorT>
|
template <typename ValueT, typename GeneratorT>
|
||||||
auto
|
decltype(auto)
|
||||||
uniform (ValueT lo, ValueT hi, GeneratorT &&gen)
|
uniform (ValueT lo, ValueT hi, GeneratorT &&gen)
|
||||||
{
|
{
|
||||||
return uniform_distribution<ValueT> { lo, hi } (gen);
|
return uniform_distribution<ValueT> { lo, hi } (
|
||||||
|
std::forward<GeneratorT> (gen)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///------------------------------------------------------------------------
|
///------------------------------------------------------------------------
|
||||||
/// Return a value uniformly random chosen value between lo and hi.
|
/// Return a value uniformly random chosen value between lo and hi.
|
||||||
|
///
|
||||||
|
/// Interval bounds are treated as per the standard Generator
|
||||||
|
/// implementations; ie, inclusive for integers, exclusive upper for reals.
|
||||||
template <typename T>
|
template <typename T>
|
||||||
auto
|
decltype(auto)
|
||||||
uniform (T lo, T hi)
|
uniform (T lo, T hi)
|
||||||
{
|
{
|
||||||
return uniform<T> (lo, hi, generator ());
|
return uniform<T> (lo, hi, generator ());
|
||||||
@ -115,7 +120,8 @@ namespace cruft::random {
|
|||||||
typename GeneratorT,
|
typename GeneratorT,
|
||||||
typename = std::enable_if_t<std::is_floating_point_v<ValueT>>
|
typename = std::enable_if_t<std::is_floating_point_v<ValueT>>
|
||||||
>
|
>
|
||||||
auto uniform (GeneratorT &&gen)
|
decltype(auto)
|
||||||
|
uniform (GeneratorT &&gen)
|
||||||
{
|
{
|
||||||
return uniform<ValueT> (ValueT{0}, ValueT{1}, std::forward<GeneratorT> (gen));
|
return uniform<ValueT> (ValueT{0}, ValueT{1}, std::forward<GeneratorT> (gen));
|
||||||
}
|
}
|
||||||
@ -127,7 +133,8 @@ namespace cruft::random {
|
|||||||
typename ValueT,
|
typename ValueT,
|
||||||
typename = std::enable_if_t<std::is_floating_point_v<ValueT>>
|
typename = std::enable_if_t<std::is_floating_point_v<ValueT>>
|
||||||
>
|
>
|
||||||
auto uniform (void)
|
decltype(auto)
|
||||||
|
uniform (void)
|
||||||
{
|
{
|
||||||
return uniform<ValueT> (ValueT{0}, ValueT{1}, generator ());
|
return uniform<ValueT> (ValueT{0}, ValueT{1}, generator ());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user