2017-11-25 14 views
0

비 타입 템플릿 매개 변수와 함께 템플릿 클래스에 함수 템플릿을 전문 : 나는 이제 함수 템플릿 validateType()C++ - 나는 클래스 템플릿 푸가

template <class T> 
bool validateType() { 
    return false; 
} 

template <class A, A value, class B> 
class Foo {}; 

및 I Foo를 포함하여 일부 유형에 대해 특수화하여 함수가 컴파일 타임 중에 일부 static_asserts를 수행하도록하려고합니다.

template <class A, class B, Foo<A, A val, B>> 
bool validateType() { 
    // do some static asserts 
} 

이 : 나는이 시도

error: wrong number of template arguments (2, should be 3) 
template <class A, class B, Foo<A, A val, B>> 
              ^~ 
note: provided for ‘template<class A, A value, class B> class Foo’ 
class Foo {}; 
     ^~~ 
error: two or more data types in declaration of ‘validateType’ 
bool validateType() { 
       ^
error: expected ‘>’ before ‘{’ token 
bool validateType() { 
        ^

을 그리고 두 번째 경우에 나는

error: non-class, non-variable partial specialization ‘validateType<Foo<A, val, B> >’ is not allowed 
bool validateType<Foo<A, val, B>>() { 
           ^
를 얻을 : 첫 번째에서

template <class A, A val, class B> 
bool validateType<Foo<A, val, B>>() { 
    // do some static asserts 
} 

를, 컴파일러는 말한다

어떻게해야합니까?

답변

1

부분 템플릿 특수화는 함수 템플릿에는 사용할 수 없습니다.
사용 SFINAE 또는 클래스 템플릿

template <class T> 
struct validateType : std::false_type {}; 

template <class A, A val, class B> 
struct validateType<Foo<A, val, B>> : std::true_type {};