2012-11-08 3 views
-1

나는 std :: enable_if를 처음 사용하고 어떻게 사용하는지 궁금하다.std :: enable_if second ask

template<int a, int b> 
class foo { 
    int c; 
} 

가 난 단지

a = 5. 

가 어떻게 표준 : enable_if를 사용하여 그렇게 할 때 멤버 C를 가지고 템플릿을 원하는 : 나는 템플릿 클래스가? std :: enable_if를 사용하는 올바른 사례입니까?

+0

어떻게 이런 일이 [첫 번째 질문] 다른 (http://stackoverflow.com/questions/13260581/c-stdenable-if)? 즉,이 예제에서도 허용 된 대답에 제안 된 기술을 사용할 수없는 이유는 무엇입니까? – jogojapan

+0

첫 번째 것은 a + b를 시행하는 것과 관련하여 몇 가지 규칙을 따릅니다. 이 중 하나는 – WhatABeautifulWorld

답변

3

부분 특수화를 사용할 수 있습니다. std::enable_if은 필요 없습니다.

//primary template 
template<int a, int b> 
class foo 
{ 
     //whatever 
}; 

//partial specialization 
template<int b> 
class foo<5,b> //when a = 5, this specialization will be used! 
{ 
    int c; //it has member c 
}; 

사용법 :

foo<1,3> f1; //primary template is used 
foo<5,3> f2; //partial specialization is used 
+0

에 대한 몇 가지 규칙에 따라 c를 포함하는 것입니다.이 경우 많은 코드가 중복됩니까? – WhatABeautifulWorld

+1

@WhatABeautifulWorld : 그런 다음 질문을 올바르게하십시오. 질문에 더 많은 정보를 제공하십시오. 또한 도움이된다면 기본 공통 클래스 템플릿을 사용해보십시오. – Nawaz