考虑以下函数,它根据参数类型在编译时计算整数积分或浮点模数:
template<typename T>
constexpr T modulo(const T x, const T y)
{
return (std::is_floating_point<T>::value) ? (x < T() ? T(-1) : T(1))*((x < T() ? -x : x)-static_cast<long long int>((x/y < T() ? -x/y : x/y))*(y < T() ? -y : y))
: (static_cast<typename std::conditional<std::is_floating_point<T>::value, int, T>::type>(x)
%static_cast<typename std::conditional<std::is_floating_point<T>::value, int, T>::type>(y));
}
这个函数的代码体能否改进?(我需要一个可以同时适用于整型和浮点型的单一函数)。
static_cast<typename<...
部分更易读。 - Andy Prowlreturn (x < 0 ? -1 : 1) * (abs(x) - (int64_t)abs(x / y) * abs(y));
更易读。 - Trass3r