我有一个模板类在 Visual Studio 6 中运行良好,但在更现代的版本中失败了。
template<double B, double C>
class MyClass
{
double k(double x) const
{
x = fabs(x);
if (x < 1.0)
return ((2.0 - 1.5*B - C) * x*x*x) + ((-3.0 + 2.0*B + C) * x*x) + (1.0 - 0.33333333*B);
if (x < 2.0)
return ((-0.16666667*B - C) * x*x*x) + ((B + 5.0*C) * x*x) + ((-2.0*B - 8.0*C) * x) + (1.3333333*B + 4.0*C);
return 0.0;
}
};
error C2993: 'double' : illegal type for non-type template parameter 'B'
我明白了,不允许使用double
常量作为模板参数的标准,VC++ 终于符合了。但我应该改用什么?该表达式被重复评估并且是一个真正的瓶颈,我希望在编译时而不是运行时计算常量。