gpt4 book ai didi

c++ - 模板函数 roundTo int, float -> 截断

转载 作者:太空狗 更新时间:2023-10-29 23:10:00 25 4
gpt4 key购买 nike

根据这个问题: Calling template function without <>; type inference我将来要使用的 round 函数现在看起来像:

template < typename TOut, typename TIn >
TOut roundTo( TIn value ) {
return static_cast<TOut>( value + 0.5 );
}
double d = 1.54;
int i = rountTo<int>(d);

然而,只有当它用于舍入为整型数据类型(如 char、short、int、long、long long int 和无符号对应物)时才有意义。如果它将与 TOut As float 或 long double 一起使用,它将提供 s***。

double d = 1.54;
float f = roundTo<float>(d);
// aarrrgh now float is 2.04;

我正在考虑函数的指定重载,但是......
这不可能……
你会如何解决这个问题?
非常感谢
糟糕

最佳答案

假设您想要最接近的整数值,转换为 TOut

static_cast<TOut>( static_cast<long long>(value + 0.5) );

floor 也应该作为内部 Actor 的替代品。关键是不要依赖对未知类型的强制转换来执行任何截断——确保明确截断,使用 floorcast 到众所周知的积分类型,然后执行您需要的进一步转换以返回指定类型。

关于c++ - 模板函数 roundTo int, float -> 截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2834922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com