C ++模板参数作为引用左值

时间:2014-12-31 11:53:03

标签: c++ templates

我正在阅读"游戏编程宝石"书。我目前正在实施正弦示例:

//Sine class
template<double &x, unsigned N>
struct Sine
{
    static constexpr double val = x * (1.0 - x * x / (2.0 * N + 2) / (2.0 * N + 3)) * Sine<x,N+1>::val;;
};
//
template<const double &x>
struct Sine<x, 10>
{
    static constexpr double val = 1.0;
};

我试图用:

调用我的模板值
constexpr double x = 1.234;
cout << "Sine<1.234,0>::val = " << Sine<x, 0>::val << endl;

导致错误:

  

错误:&#39; x&#39;不是类型&#39; double&amp;&#39;的有效模板参数。因为   cv-qualification中的冲突|

我不知道我做错了什么? 在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

浮点类型不能是非类型模板参数。因此,模板的作者改为引用了double

您的代码有两个问题。首先,这种引用的参数必须具有静态存储持续时间和链接,您的变量不能同时具有块范围中定义的两者。其次,您的变量为const(因为它是constexpr),并且非const引用无法绑定到const对象。

将模板参数更改为double const&,并传递类型为constexpr的名称空间范围double作为模板参数。