2017-11-05 18 views
0

고유 한 enable_if 조건을 만들 수있는 방법이 있습니까?사용자 정의 템플릿 제약 조건 만 사용자 정의 템플릿 클래스를 받아들이도록 정의했습니다.

템플릿 클래스가 있습니다 : Foo<int, int, int> 그리고 다른 유형의 템플릿 클래스가 있습니다 : Template <T> class Bar.

Bar 클래스를 제한하고 싶습니다. 유형은 Foo 클래스 중 하나 일 수 있습니다. 예 : Foo<0, 0 ,1>은 사용할 수 있지만 int 유형은 사용할 수 없습니다.

사용자 정의 enable_if를 통해이 제한 조건을 요구하는 짧고 깔끔한 방법이 있습니까? 내가 고려하지 않은 더 나은 방법이 있습니까? 이상적으로 솔루션은 상대적으로 작고 명확 할 것이며 아마도 std :: is_arithmetic이 작동하는 방식 일 것입니다.

시간과 제안에 감사드립니다.

답변

1

라이브러리 유형을 가져올 필요가 없습니다. 가장 쉬운 방법은 좋은 오래된 전문화 될 것이다 :

다른 유형을 인스턴스화하는 것은 불완전 클래스 선언이다 죽은 끝을 칠 것 동안, Foo<...>이 특성화를 선택 할 수있는 유형 Bar을 인스턴스화
template <typename> class Bar; 

template<int a, int b, int c> 
class Bar<Foo<a, b, c>> { 
    // Define `Bar` 
}; 

Bar<T>.

+0

(죄송합니다. 다른 기기를 찾을 수 없습니다.) 제안에 감사드립니다. Bar : > – user7119460

+1

@ user7119460이 아닌 Bar <0,0, 1>을 통해 클래스를 호출해야한다고 생각했습니다. 아니요, 전문화 방법이 아닙니다. . 여전히'푸 (Foo) '를 기대하고있다. – StoryTeller