2013-06-29 2 views
2

특성을 사용하여 템플릿 인수가 값 또는 형식인지 추측 할 수 있습니까?특성을 사용하여 템플릿에서 값 또는 유형을 감지 할 수 있습니까?

template <typename A> 
void function(){ 
    if(is_value<A>()::value) 
     cout<<"A is value"<<endl; 
    else 
     cout<<"A is type"<<endl; 
} 

int main(){ 
    function<int>(); 
    function<3>(); 
} 

출력

14.3/1 표준에
"A is type" 
"A is value" 
+0

, 즉 대단히 유용 할 것이다. 이것은 람다와 함께 아주 좋은 것들을 허용합니다 : D – GameDeveloper

+1

값은 타입이 아니며, 'template '는 타입을 기대합니다. 거푸집 없음, "모두 잡기"매개 변수가 없습니다. – Xeo

답변

1

:

템플릿 파라미터의 세 형태에 대응하는 템플릿 인수의 세 가지 형태가있다 : 비 - 타입템플릿.

및 14.3.1/1 표준에

:

타입 ID되어야한다 있는 템플릿 파라미터 템플릿 인수. 템플릿 인수는 유형 때문에

, 당신은 템플릿 인수로 유형-ID을 통과해야한다. 3유형 -ID이 아닙니다. 그래서, 당신의 방식으로 불가능합니다.

비 형 템플릿 인수로 함수를 추가 할 수 있습니다 : 당신이 immagine 수

template <class A> 
void function() 
{ 
    std::cout << "A is type" << std::endl; 
} 

template <int A> 
void function() 
{ 
    std::cout << "A is value" << std::endl; 
} 

int main() 
{ 
    function<int>(); 
    function<3>(); 
} 
+0

멋지지만 모든 가능한 "값 유형"에 대해 다른 기능이 필요합니다. 그래서 기본적으로 내가 기대했던 일을하는 것은 불가능합니다. (. – GameDeveloper

관련 문제