템플릿 메타 프로그래밍을 사용하여 사인 함수를 구현하려고합니다. 그러나 'radtest'가 double &에 대한 유효한 템플릿 인자가 아니므로 cv-qualification의 충돌 때문에 오류가 발생합니다. 다음은 코드입니다.템플릿 메타 프로그래밍, CV 적격 오류의 충돌
#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 &' –