テンプレートメタプログラミングを使用して正弦関数を実装しようとしています。しかし、私はエラー 'radtest'はdouble &の有効なテンプレート引数ではないため、cv-qualificationの競合が発生します。コードは次のとおりです。テンプレートのメタプログラミング、cv-qualificationエラーの競合
#include <iostream>
using namespace std;
template <double&, int, int> struct
Series;
template <double& rad> struct Sine
{
enum
{
maxterms=10
};
static inline double sin()
{
return (rad) *
Series<(rad), 0, maxterms>::val();
}
};
template <double& rad, int i, int
maxterms> struct Series
{
enum
{
cont = i+1 != maxterms,
nxt1 = (i+1)*cont,
nxtmax = maxterms*cont
};
// uses recursive definition of
// Sine
// sin(x)=x*term(0)
// term(n)=1-
// x*x/(2*n+2)/(2*n+3)*term(n+1)
static inline double val()
{
return 1 - (rad)*
(rad)/(2.0*i+2.0)/(2.0*i+3.0)
* Series<rad * cont, nxt1,
nxtmax>::val();
}
};
#define SineT(rad) Sine<rad>::sin()
constexpr double radtest=0.707;
int main()
{
cout << "Sine of " << radtest
<< " is: " << SineT(radtest);
return 0;
}
何が問題なのですか?前もって感謝します。
'double'テンプレート引数として –
'rad :: val()'の 'rad * cont'はそうではありません。 'constexpr double&' –