在以下函数中,我正在寻找一个替换isIntegral<T>
的表达式。
目的是当T
是整数类型时,我们在0.5f
隐含地舍弃该值之前添加static_cast
(因此我们获得了四舍五入的值),但是当T
是分数类型时,我们什么也不添加,因此static_cast
仅会降低精度。
T interpolate( T const & prev, T const & next, float interpolation )
{
float prevFloat = static_cast< float >( prev );
float nextFloat = static_cast< float >( next );
float result = prevFloat + ( (nextFloat-prevFloat) * interpolation );
return static_cast< T >( result + ( isIntegral<T> ? 0.5f : 0.0f );
}
最佳答案
使用std::numeric_limits<T>::is_integer
(在<limits>
header 中)。