根据这个问题:
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明确地将截断确保为众所周知的整数类型,然后执行进一步的强制转换,您需要返回指定的类型。

09-06 20:32