这是对 std::enable_if 的正确使用吗?它有效,但它正确吗?
//*.h file
template <typename T>
static typename std::enable_if<std::is_integral<T>::value, T>::type
randomFrom(const T min, const T max);
template <typename T>
static typename std::enable_if<std::is_floating_point<T>::value, T>::type
randomFrom(const T min, const T max);
.
//*.inl file
template <typename T>
inline typename std::enable_if<std::is_integral<T>::value, T>::type
Math::randomFrom(const T min, const T max)
{
static std::default_random_engine re((unsigned long)time(0));
std::uniform_int_distribution<T> uni(min, max);
return static_cast<T>(uni(re));
}
template <typename T>
inline typename std::enable_if<std::is_floating_point<T>::value, T>::type
Math::randomFrom(const T min, const T max)
{
static std::default_random_engine re((unsigned long)time(0));
std::uniform_real_distribution<T> uni(min, max);
return static_cast<T>(uni(re));
}
我怎样才能重写它,以实现更干净的界面?像:
template <typename T>
static T randomFrom(const T min, const T max);
顺便说一句,我有类似的东西:(我不想使用 boost)
typedef typename boost::mpl::if_<
boost::is_floating_point<T>,
boost::uniform_real<>,
boost::uniform_int<>>::type dist_type;
并且整个行为都在单个功能中解决。但没有什么像std::if
对吧?