2013-01-10 3 views
3

가능한 중복 :C++ 템플릿

SomeClass<int, 1> intObj; //ok 
SomeClass<float, 1.f> floatObj; //error: 'float' : illegal type for non-type template parameter 'DefaultValue' 
:이처럼 사용할

template<typename ValueType, ValueType DefaultValue> 
class SomeClass 
{ 
    public: 
     SomeClass() : m_value(DefaultValue){} 

     ValueType m_value; 
}; 

:
C++: Why can’t I use float value as a template parameter?

나는이 클래스가

float을 사용할 때 왜이 오류가 발생하는지 설명해 주시겠습니까?

RGBA 색상을 표현하고 다른 색상 표현 (예 : 흰색)에 대한 기본값으로 채널을 초기화하는 것과 비슷한 것을 사용하고 싶습니다.

+2

간단히 대답하면 표준에서 허용하지 않는다는 것입니다. –

+0

@ K-ballo 네, 같은 질문입니다. 닫으십시오 :) – Felics

+0

@Felics : 나는 이미 4 표를 더 기다리면서 그것을 닫으려고 투표했습니다 ... –

답변

0

C++은 불행히도 부동 소수점 형식이 아닌 템플릿 매개 변수를 지원하지 않습니다.

0

비 유형 템플릿 매개 변수float 일 수 없기 때문에 오류가 발생합니다. 그들은 단지 일 수 있습니다., 열거 형, 또는 주소는입니다.

3

§ 14.1/7 (C++ 11 N3485)를 명시 적으로 금지 참조 : 비 형 템플릿 매개 변수가 플로리다 oating 포인트를 선언 할 수 없다

, 클래스, 또는 빈 공간 유형. [예 :

template<double d> class X; // error 
template<double* pd> class Y; // OK 
template<double& rd> class Z; // OK 
0

간단합니다 : 특수 철골 구조 템플릿 매개 변수가 필수 유형 또는 포인터 타입의 컴파일 타임 상수해야 즉, 부울, 열거, 포인터, 포인터 - 투 - 회원, 긴, INT, 짧은 문자 . 부동 소수점 매개 변수는 현재 표준에서 허용되지 않습니다.

+1

그들은 _enumerations_ 일 수도 있습니다. –

+0

님이 귀하의 의견을 올린 순간에 그 내용을 추가했습니다.) –

관련 문제