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

时间:2010-11-16 17:37:22

标签: c++ templates types

在以下函数中,我正在寻找一个替换isIntegral<T>的表达式。

目的是当T是一个整数类型时,我们在0.5f之前添加static_cast,然后将值置于底层(因此我们获得一个舍入值),但是当{{1}时我是一个小数类型,我们什么都不添加,所以T只能降低精度。

static_cast

4 个答案:

答案 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
}