這是正確使用std :: enable_if嗎? 它的作品,但它是正確的?正確使用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);
與升壓
BTW我有這樣的事情: (我不想使用升壓)
typedef typename boost::mpl::if_<
boost::is_floating_point<T>,
boost::uniform_real<>,
boost::uniform_int<>>::type dist_type;
和整體行爲在單一功能的解決。但是沒有什麼像std::if
對嗎?
對於'std :: conditional',哈哈,+1沒有想過(也沒有讀過MPL的boost部分,我承認)。解決它在一個單一的功能。 –
這正是我一直在尋找的。謝謝! – relaxxx