在以下函数中,我正在寻找一个替换isIntegral<T>
的表达式。
目的是当T
是一个整数类型时,我们在0.5f
之前添加static_cast
,然后将值置于底层(因此我们获得一个舍入值),但是当{{1}时我是一个小数类型,我们什么都不添加,所以T
只能降低精度。
static_cast
答案 0 :(得分:9)
使用std::numeric_limits<T>::is_integer
(位于<limits>
标题中)。
答案 1 :(得分:2)
为什么不宣布const float addend = 0.5f - static_cast<T>(0.5f)
答案 2 :(得分:0)
std::is_integral<T>::value
如果您包含<type_traits>
,大多数编译器现在支持此功能。
答案 3 :(得分:0)
这应该是可能的(没有任何运行时开销)和一些Boost魔法(未经测试):
#include <boost/type_traits/is_integral.hpp>
#include <boost/utility/enable_if.hpp>
template<typename T>
typename boost::enable_if<boost::is_integral<T>, T>::type
interpolate(const T& prev, const T& next, float interpolation) {
// code for the case that T is an integral type
}
template<typename T>
typename boost::disable_if<boost::is_integral<T>, T>::type
interpolate(const T& prev, const T& next, float interpolation) {
// code for the case that T is not an integral type
}