【发布时间】:2012-03-20 12:43:15
【问题描述】:
在编写泛型类时,我的方法最终会被强制转换弄得杂乱无章(否则我会收到警告,这在我们的项目中被视为错误):
template <typename floatType>
class foo
{
public:
typedef floatType real_type;
real_type bar()
{
real_type a = (real_type)0.5; // should I be using static_cast? Either way, the code becomes cluttered quickly
real_type b = a + 0.6; // warning here for floatType = float
real_type someLongEquation = a + ((real_type)0.5 * (real_type)100) + (real_type)17.0;
return a + b + someLongEquation;
}
};
int main()
{
{
foo<float> z;
z.bar();
}
{
foo<double> z;
z.bar();
}
return 0;
}
有什么办法可以减少这种混乱吗?
请注意,我意识到我在 someLongEquation 中使用了魔术常量。即使我将它们分开,也会增加混乱。无论哪种方式,这都不是问题的重点:)
【问题讨论】:
-
您收到什么警告?
-
@DavidBrown:
Conversion from 'double' to 'float', possible loss of data(内置类型之间的强制转换非常标准,可能会导致精度损失) -
只需在每个常量值后面加上
f。将 float 分配给 double 是可以的;) -
@Rob:MSVC(如果您一直在使用 MSVC,警告会泄露这一点)。