것은 내가 메타 프로그래밍 프로젝트를 진행하고, 우리는 템플릿 인수로 부동 소수점 숫자를 전달할 수있는 능력을 가지고 싶습니다. 나는이 질문이 Stack Exchange에 더 잘 맞을 지 확신 할 수 없었지만, 다소 개념적으로이 사이트를 선택했다.어떻게 부동 소수점 숫자를 템플릿 매개 변수로 전달할 수 있습니까?
는 기본적으로,이 작업을 수행 할 수 :
template <double var>
double fun() { return var; }
int main()
{
double myDoble = fun<1.0>();
return 0;
}
물론,이 작업을 수행 할 수 없습니다. 이 링크 (http://en.cppreference.com/w/cpp/language/template_parameters)을 만드는 분명히 템플릿 인수로 전달 유형은 다음 중 하나가 될해야 :
integral type
enumeration
pointer to object or to function
lvalue reference to object or to function
pointer to member object or to member function
std::nullptr_t (since C++11)
그러나, 사실은 내가 구조체에 아마도 객체 (포인터를 포인터를 전달할 수 있다는 double을 포함하고 있는가?)는 그와 같은 double에 대한 포인터를 전달함으로써 위의 것을 달성 할 수있는 방법이 있을까 궁금하게 만든다.
그래서 나는이 시도 :
다음과 같은 오류 제공template <double* pVar>
double fun()
{
return *pVar;
}
int main() {
static const double param = 1.2;
double value = fun<¶m>();
return 0;
}
:
prog.cpp:9:29: error: ‘& param’ is not a valid template argument of type ‘double*’ because ‘param’ has no linkage
double value = fun<¶m>();
나는 문제가 나는 원시적를 사용하고 있음을 할 수 있다는 생각을, 그래서 나는이 시도 :
를 동일한 오류를 범struct D
{
double val;
};
template <D* pD>
double fun()
{
return pD->val;
}
int main() {
static const D d{1.2};
double value = fun<&d>();
return 0;
}
.
사람이 문제를 접근에 대한 다른 아이디어가 있습니까? 나는 사람들이 "할 수 없다"라는 대답을 자제 할 수 있다면 감사 할 것이다. 나는 그것을 할 수 없다는 것을 알고, 어쨌든 그것을하고 싶다! ;)
는 글로벌하십시오. 추신 : 포인터 대신 참조를 사용할 수 있습니다. –
@ThomasEding 나는 그것을 일하게 할 수 없다. http://ideone.com/LGDv1j – arman
왜 필요한가요? 왜 컴파일시 (예 : 템플릿 사용)에 완료해야합니까? 어쩌면 그것은 [XY 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –