在以下函数中,我正在寻找一个替换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 中)。

10-06 00:54