对整数类型执行舍入,但不对小数类型执行舍入

duk*_*ave 1 c++ templates types

在以下函数中,我正在寻找要替换的表达式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 );
}
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 9

使用std::numeric_limits<T>::is_integer(它在<limits>标题中).